diff --git a/.gitignore b/.gitignore
index c366ea24..622a9c22 100644
--- a/.gitignore
+++ b/.gitignore
@@ -113,3 +113,6 @@ node_modules/
# .DS_Store
.DS_Store
+
+.docks
+.docs
\ No newline at end of file
diff --git a/Jenkinsfile b/Jenkinsfile
new file mode 100644
index 00000000..5ca0b085
--- /dev/null
+++ b/Jenkinsfile
@@ -0,0 +1,59 @@
+pipeline {
+ agent {
+ node {
+ label 'crawlab'
+ }
+ }
+
+ environment {
+ HOME = '/home/yeqing'
+ NODE_HOME = '/home/yeqing/.nvm/versions/node/v8.12.0'
+ ROOT_DIR = "/home/yeqing/jenkins_home/workspace/crawlab_${GIT_BRANCH}"
+ PYTHON_HOME = '/home/yeqing/.pyenv/shims'
+ }
+
+ stages {
+ stage('Setup') {
+ steps {
+ echo "Running Setup..."
+ // sh '. /home/yeqing/.profile'
+ script {
+ if (env.GIT_BRANCH == 'develop') {
+ env.MODE = 'test'
+ } else if (env.GIT_BRANCH == 'master') {
+ env.MODE = 'production'
+ } else {
+ env.MODE = 'test'
+ }
+ }
+ }
+ }
+ stage('Build Frontend') {
+ steps {
+ echo "Building frontend..."
+ // sh "${NODE_HOME}/bin/node ${NODE_HOME}/bin/npm install -g yarn pm2 --registry=http://registry.npm.taobao.org/"
+ sh "cd ${ROOT_DIR}/frontend && ${NODE_HOME}/bin/node ${NODE_HOME}/bin/yarn install --registry=http://registry.npm.taobao.org/ --scripts-prepend-node-path=${NODE_HOME}/bin/node"
+ sh "cd ${ROOT_DIR}/frontend && ${NODE_HOME}/bin/node ${ROOT_DIR}/frontend/node_modules/.bin/vue-cli-service build --mode=${MODE}"
+ }
+ }
+ stage('Build Backend') {
+ steps {
+ echo "Building backend..."
+ sh "${PYTHON_HOME}/pip install -r ${ROOT_DIR}/crawlab/requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple"
+ }
+ }
+ stage('Test') {
+ steps {
+ echo 'Testing..'
+ }
+ }
+ stage('Deploy') {
+ steps {
+ echo 'Deploying....'
+ sh "${NODE_HOME}/bin/node ${NODE_HOME}/bin/pm2 restart app"
+ sh "${NODE_HOME}/bin/node ${NODE_HOME}/bin/pm2 restart run_flower"
+ sh "${NODE_HOME}/bin/node ${NODE_HOME}/bin/pm2 restart run_worker"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/README-zh.md b/README-zh.md
index 36e9d82d..88d83abc 100644
--- a/README-zh.md
+++ b/README-zh.md
@@ -1,5 +1,6 @@
# Crawlab
+

diff --git a/README.md b/README.md
index 2914ffa2..9bffb6ed 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,9 @@
# Crawlab
+

-
+
[中文](https://github.com/tikazyq/crawlab/blob/master/README-zh.md) | English
diff --git a/crawlab/bin/run_app.py b/crawlab/bin/run_app.py
deleted file mode 100644
index 999d7278..00000000
--- a/crawlab/bin/run_app.py
+++ /dev/null
@@ -1,17 +0,0 @@
-import sys
-import os
-
-# make sure the working directory is in system path
-file_dir = os.path.dirname(os.path.realpath(__file__))
-root_path = os.path.abspath(os.path.join(file_dir, '..'))
-sys.path.append(root_path)
-
-from config import PROJECT_LOGS_FOLDER, FLASK_HOST, FLASK_PORT
-from manage import app
-
-# create folder if it does not exist
-if not os.path.exists(PROJECT_LOGS_FOLDER):
- os.makedirs(PROJECT_LOGS_FOLDER)
-
-# run app instance
-app.run(host=FLASK_HOST, port=FLASK_PORT)
diff --git a/crawlab/bin/start_flower.sh b/crawlab/bin/start_flower.sh
deleted file mode 100755
index 98339f7d..00000000
--- a/crawlab/bin/start_flower.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/usr/bin/env bash
-celery flower --broker=mongodb://localhost:27017
diff --git a/frontend/.env.production b/frontend/.env.production
index 7578e882..58fe7f33 100644
--- a/frontend/.env.production
+++ b/frontend/.env.production
@@ -1,2 +1,2 @@
NODE_ENV='production'
-VUE_APP_BASE_URL='http://crawlab.cn:8000/api'
+VUE_APP_BASE_URL='http://114.67.75.98:8000/api'
diff --git a/frontend/.env.test b/frontend/.env.test
new file mode 100644
index 00000000..acff44de
--- /dev/null
+++ b/frontend/.env.test
@@ -0,0 +1,2 @@
+NODE_ENV='test'
+VUE_APP_BASE_URL='http://114.67.75.98:8000/api'