diff --git a/ci-build.sh b/ci-build.sh
new file mode 100755
index 0000000..af35db9
--- /dev/null
+++ b/ci-build.sh
@@ -0,0 +1,38 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#!/bin/sh
+
+docker pull sathwik/docker-maven-gulp:latest
+
+export JAVA_OPTS="-Xmx1024M -XX:MaxPermSize=512M"
+GULP_ARGS="$@"
+CONTAINER_USERNAME="dummy"
+CONTAINER_GROUPNAME="dummy"
+HOMEDIR="/home/$CONTAINER_USERNAME"
+GROUP_ID=$(id -g)
+USER_ID=$( id -u)
+
+CREATE_USER_COMMAND="groupadd -f -g $GROUP_ID $CONTAINER_GROUPNAME && useradd -u $USER_ID -g $CONTAINER_GROUPNAME $CONTAINER_USERNAME && mkdir --parent $HOMEDIR && chown -R $CONTAINER_USERNAME:$CONTAINER_GROUPNAME $HOMEDIR"
+
+SU_USER="su $CONTAINER_USERNAME -c "
+
+NPM_COMMAND="$SU_USER 'npm install'"
+ 
+GULP_COMMAND="$SU_USER 'gulp $GULP_ARGS'"
+
+FINAL_COMMAND="$CREATE_USER_COMMAND && $NPM_COMMAND && $GULP_COMMAND"
+
+docker run --rm -e JAVA_OPTS -v `pwd`:/workspace -v $HOME/.m2:/home/dummy/.m2 -v /tmp:/tmp --entrypoint bash sathwik/maven_gulp:3.9_4.5 -c "$FINAL_COMMAND"
diff --git a/e2e/main.po.js b/e2e/main.po.js
index 2ae8e2c..11afcbc 100644
--- a/e2e/main.po.js
+++ b/e2e/main.po.js
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 /**
  * This file uses the Page Object pattern to define the main page for tests
  * https://docs.google.com/presentation/d/1B6manhG0zEXkC-H-tPo2vwU06JhL8w9-XCF9oehXzAQ
diff --git a/e2e/main.spec.js b/e2e/main.spec.js
index da89d22..71648a6 100644
--- a/e2e/main.spec.js
+++ b/e2e/main.spec.js
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 'use strict';
 
 describe('The main view', function () {
diff --git a/gulp/build.js b/gulp/build.js
index def575c..5c5c957 100644
--- a/gulp/build.js
+++ b/gulp/build.js
@@ -18,7 +18,8 @@
  */
 'use strict';
 
-var gulp = require('gulp');
+var gulp = require('gulp'),
+    runSequence = require('run-sequence');
 
 var $ = require('gulp-load-plugins')({
   pattern: ['gulp-*', 'main-bower-files', 'uglify-save-license', 'del']
@@ -154,8 +155,11 @@
     .pipe(gulp.dest('dist/'));
 });
 
-gulp.task('clean', function (done) {
-  $.del.sync(['dist/', '.tmp/'], done);
+gulp.task('clean', function () {
+  return $.del.sync(['dist/', '.tmp/']);
 });
 
-gulp.task('build', ['html', 'images', 'fonts', 'misc']);
+gulp.task('build', function(done){
+    runSequence('clean', 'html', 'images', 'fonts', 'misc',done);
+});
+
diff --git a/gulp/maven.js b/gulp/maven.js
index 1083f3e..3c32b86 100644
--- a/gulp/maven.js
+++ b/gulp/maven.js
@@ -21,22 +21,23 @@
 
 var gulp = require('gulp'),
     maven = require('maven-deploy'),
-    config = require('../maven-config.json');
+    config = require('../maven-config.json'),
+    runSequence = require('run-sequence');
 
 //install on local maven repo
-gulp.task('install', function() {
+gulp.task('install', ['build'], function() {
     maven.config(config);
     return maven.install();
 });
 
 //Snapshot release to Apache, used by CI server
-gulp.task('snapshot', function() {
+gulp.task('snapshot', ['build'], function() {
     maven.config(config);
     return maven.deploy('apache-snapshot-repo',true);
 });
 
 //Actual release to Apache repo
-gulp.task('release', function() {
+gulp.task('release', ['build'], function() {
     maven.config(config);
     return maven.deploy('apache-release-repo');
 });
\ No newline at end of file
diff --git a/gulpfile.js b/gulpfile.js
index 397c8a7..4c825d3 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -18,10 +18,11 @@
  */
 'use strict';
 
-var gulp = require('gulp');
+var gulp = require('gulp'),
+    runSequence = require('run-sequence');
 
 require('require-dir')('./gulp');
 
-gulp.task('default', ['clean'], function () {
-    gulp.start('build');
+gulp.task('default', function (callback) {
+     runSequence('clean', callback);
 });
diff --git a/maven-config.json b/maven-config.json
index 97fd649..79b1565 100644
--- a/maven-config.json
+++ b/maven-config.json
@@ -8,11 +8,11 @@
     "repositories" : [
       {
         "id": "apache-snapshot-repo",
-        "url": "https://repository.apache.org/content/repositories/snapshots"
+        "url": "http://192.168.0.101:8080/repository/snapshots/"
       },
       {
         "id": "apache-release-repo",
-        "url": "https://repository.apache.org/service/local/staging/deploy/maven2"
+        "url": "http://192.168.0.101:8080/repository/internal/"
       }
     ]
 }
\ No newline at end of file
diff --git a/package.json b/package.json
index c75755e..a765068 100644
--- a/package.json
+++ b/package.json
@@ -39,7 +39,8 @@
     "uglify-save-license": "~0.4.1",
     "jshint": "~2.9.3",
     "gulp-zip": "~3.2.0",
-    "maven-deploy": "~1.5.0"
+    "maven-deploy": "~1.5.0",
+    "run-sequence": "~1.2.2"
   },
   "engines": {
     "node": ">=0.10.0"
