You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@submarine.apache.org by li...@apache.org on 2020/02/20 12:10:19 UTC

[submarine] branch master updated: SUBMARINE-388. Rebuild submarine image every run k8s-test

This is an automated email from the ASF dual-hosted git repository.

liuxun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/submarine.git


The following commit(s) were added to refs/heads/master by this push:
     new 8c56ff2  SUBMARINE-388. Rebuild submarine image every run k8s-test
8c56ff2 is described below

commit 8c56ff29ec05189415b9b7dfac0570889fc45ac6
Author: Xun Liu <li...@apache.org>
AuthorDate: Thu Feb 20 10:18:14 2020 +0800

    SUBMARINE-388. Rebuild submarine image every run k8s-test
    
    ### What is this PR for?
    
    k8s test: When the user submits the code to his/her repository or the `apache/submarine` git repository, the travis test task will automatically start.
    
    test-k8s runs test cases in travis. It will first create a k8s cluster by using the kind tool in travis,
    
    and then compile and package the submarine project in `submarine-dist` directory to build a docker image.
    
    Then use this latest code build docker image in k8s Deploy a submarine system. Then run test case in the `test-k8s/..` directory.
    
    ### What type of PR is it?
    [Feature]
    
    ### Todos
    * [ ] - Task
    
    ### What is the Jira issue?
    * https://issues.apache.org/jira/browse/SUBMARINE-388
    
    ### How should this be tested?
    * https://travis-ci.org/liuxunorg/submarine/builds/650831518
    
    ### Screenshots (if appropriate)
    
    ### Questions:
    * Does the licenses files need update? No
    * Is there breaking changes for older versions? No
    * Does this needs documentation? Yes
    
    Author: Xun Liu <li...@apache.org>
    
    Closes #185 from liuxunorg/SUBMARINE-388 and squashes the following commits:
    
    bc8ba89 [Xun Liu] Fix issue in doc
    6b53e84 [Xun Liu] Add doc.
    596df12 [Xun Liu] SUBMARINE-388. [k8s-e2e] Update docker image in k8s-test
---
 .travis.yml                                        |  34 +++----
 dev-support/docker-images/database/build.sh        |  15 +--
 dev-support/docker-images/operator/Dockerfile      |   4 +-
 dev-support/docker-images/operator/build.sh        |  14 +--
 dev-support/docker-images/submarine/Dockerfile     |  11 +--
 dev-support/docker-images/submarine/build.sh       |  11 ++-
 docs/development/IntegrationTest.md                |  84 +++++++++++++----
 pom.xml                                            |   3 +-
 .../operator => submarine-cloud}/Dockerfile        |  15 ++-
 submarine-cloud/Makefile                           |  12 +--
 submarine-cloud/build-submarine-operator.sh        |  33 -------
 .../database => submarine-cloud}/build.sh          |  31 +++----
 submarine-cloud/go.mod                             |   2 +-
 submarine-cloud/hack/deploy-submarine.sh           |  23 +++--
 submarine-cloud/hack/integration-test.sh           | 102 +++++++++++++++++++--
 .../submarine-cluster/submarine-database.yaml      |   2 +-
 .../submarine-cluster/submarine-server.yaml        |   4 +-
 .../manifests/submarine-operator/deployment.yaml   |   2 +-
 submarine-cloud/pom.xml                            |  80 ++++++++--------
 submarine-dist/src/assembly/distribution.xml       |   8 ++
 submarine-test/test-k8s/pom.xml                    |  11 ++-
 21 files changed, 306 insertions(+), 195 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 6ac14fa..135604b 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -48,6 +48,7 @@ env:
     - EXCLUDE_INTERPRETER="" # Template disable by SUBMARINE-381 "!submarine-workbench/interpreter,!submarine-workbench/interpreter/interpreter-engine,!submarine-workbench/interpreter/python-interpreter,!submarine-workbench/interpreter/spark-interpreter
     - EXCLUDE_K8S="!submarine-server/server-submitter/submitter-k8s"
     - EXCLUDE_COMMON_RPC="!submarine-commons/commons-rpc"
+    - EXCLUDE_CLOUD="!org.apache.submarine:submarine-cloud"
     - MOZ_HEADLESS=1
 
 before_install:
@@ -90,33 +91,33 @@ matrix:
   include:
     - name: Test License compliance using RAT tool
       language: java
-      jdk: "openjdk8"
+      jdk: openjdk8
       dist: xenial
       env: PROFILE="" BUILD_FLAG="clean" TEST_FLAG="org.apache.rat:apache-rat-plugin:check" TEST_PROJECTS=""
 
     - name: Build submarine submitter on hadoop-2.7
       language: java
-      jdk: "openjdk8"
+      jdk: openjdk8
       dist: xenial
-      env: PROFILE="-Phadoop-2.7" BUILD_FLAG="clean package install -DskipTests -DskipRat" TEST_FLAG="test -DskipRat" MODULES="-pl ${EXCLUDE_K8S},${EXCLUDE_WORKBENCH},${EXCLUDE_INTERPRETER},!submarine-dist" TEST_MODULES="-pl ${EXCLUDE_K8S},${EXCLUDE_WORKBENCH},${EXCLUDE_INTERPRETER},${EXCLUDE_COMMON_RPC},!submarine-dist" TEST_PROJECTS=""
+      env: PROFILE="-Phadoop-2.7" BUILD_FLAG="clean package install -DskipTests -DskipRat" TEST_FLAG="test -DskipRat" MODULES="-pl ${EXCLUDE_K8S},${EXCLUDE_WORKBENCH},${EXCLUDE_INTERPRETER},${EXCLUDE_CLOUD},!submarine-dist" TEST_MODULES="-pl ${EXCLUDE_K8S},${EXCLUDE_WORKBENCH},${EXCLUDE_INTERPRETER},${EXCLUDE_CLOUD},${EXCLUDE_COMMON_RPC},!submarine-dist" TEST_PROJECTS=""
 
     - name: Build submarine submitter on hadoop-2.9 (default)
       language: java
-      jdk: "openjdk8"
+      jdk: openjdk8
       dist: xenial
-      env: PROFILE="-Phadoop-2.9" BUILD_FLAG="clean package install -DskipTests -DskipRat" TEST_FLAG="test -DskipRat" MODULES="-pl ${EXCLUDE_K8S},${EXCLUDE_WORKBENCH},${EXCLUDE_INTERPRETER},!submarine-dist" TEST_MODULES="-pl ${EXCLUDE_K8S},${EXCLUDE_WORKBENCH},${EXCLUDE_INTERPRETER},${EXCLUDE_COMMON_RPC},!submarine-dist" TEST_PROJECTS=""
+      env: PROFILE="-Phadoop-2.9" BUILD_FLAG="clean package install -DskipTests -DskipRat" TEST_FLAG="test -DskipRat" MODULES="-pl ${EXCLUDE_K8S},${EXCLUDE_WORKBENCH},${EXCLUDE_INTERPRETER},${EXCLUDE_CLOUD},!submarine-dist" TEST_MODULES="-pl ${EXCLUDE_K8S},${EXCLUDE_WORKBENCH},${EXCLUDE_INTERPRETER},${EXCLUDE_CLOUD},${EXCLUDE_COMMON_RPC},!submarine-dist" TEST_PROJECTS=""
 
     - name: Build submarine submitter on hadoop-3.1
       language: java
-      jdk: "openjdk8"
+      jdk: openjdk8
       dist: xenial
-      env: PROFILE="-Phadoop-3.1" BUILD_FLAG="clean package install -DskipTests -DskipRat" TEST_FLAG="test -DskipRat" MODULES="-pl ${EXCLUDE_K8S},${EXCLUDE_WORKBENCH},${EXCLUDE_INTERPRETER},!submarine-dist" TEST_MODULES="-pl ${EXCLUDE_K8S},${EXCLUDE_WORKBENCH},${EXCLUDE_INTERPRETER},${EXCLUDE_COMMON_RPC},!submarine-dist" TEST_PROJECTS=""
+      env: PROFILE="-Phadoop-3.1" BUILD_FLAG="clean package install -DskipTests -DskipRat" TEST_FLAG="test -DskipRat" MODULES="-pl ${EXCLUDE_K8S},${EXCLUDE_WORKBENCH},${EXCLUDE_INTERPRETER},${EXCLUDE_CLOUD},!submarine-dist" TEST_MODULES="-pl ${EXCLUDE_K8S},${EXCLUDE_WORKBENCH},${EXCLUDE_INTERPRETER},${EXCLUDE_CLOUD},${EXCLUDE_COMMON_RPC},!submarine-dist" TEST_PROJECTS=""
 
     - name: Build submarine submitter on hadoop-3.2
       language: java
-      jdk: "openjdk8"
+      jdk: openjdk8
       dist: xenial
-      env: PROFILE="-Phadoop-3.2" BUILD_FLAG="clean package install -DskipTests -DskipRat" TEST_FLAG="test -DskipRat" MODULES="-pl ${EXCLUDE_K8S},${EXCLUDE_WORKBENCH},${EXCLUDE_INTERPRETER},!submarine-dist" TEST_MODULES="-pl ${EXCLUDE_K8S},${EXCLUDE_WORKBENCH},${EXCLUDE_INTERPRETER},${EXCLUDE_COMMON_RPC},!submarine-dist" TEST_PROJECTS=""
+      env: PROFILE="-Phadoop-3.2" BUILD_FLAG="clean package install -DskipTests -DskipRat" TEST_FLAG="test -DskipRat" MODULES="-pl ${EXCLUDE_K8S},${EXCLUDE_WORKBENCH},${EXCLUDE_INTERPRETER},${EXCLUDE_CLOUD},!submarine-dist" TEST_MODULES="-pl ${EXCLUDE_K8S},${EXCLUDE_WORKBENCH},${EXCLUDE_INTERPRETER},${EXCLUDE_CLOUD},${EXCLUDE_COMMON_RPC},!submarine-dist" TEST_PROJECTS=""
 
     - name: Build submarine submitter on Kubernetes
       dist: xenial
@@ -159,19 +160,20 @@ matrix:
 
     - name: Test submarine test-e2e
       language: java
-      jdk: "openjdk8"
+      jdk: openjdk8
       dist: xenial
       addons:
         chrome: stable
-      env: PROFILE="-Phadoop-2.9" BUILD_FLAG="clean package -DskipTests" TEST_FLAG="verify -DskipRat -am" TEST_MODULES="-pl submarine-test/e2e" TEST_PROJECTS=""
+      env: PROFILE="-Phadoop-2.9" BUILD_FLAG="clean package install -DskipTests" TEST_FLAG="verify -DskipRat -am" TEST_MODULES="-pl submarine-test/e2e" TEST_PROJECTS=""
 
     - name: Test submarine-test-k8s
-      language: java
-      jdk: "openjdk8"
       dist: xenial
+      services: docker
+      language: java
+      jdk: openjdk8
       addons:
         chrome: stable
-      env: PROFILE="-Phadoop-2.9" BUILD_FLAG="clean package -DskipTests" TEST_FLAG="verify -DskipRat -am" TEST_MODULES="-pl submarine-test/test-k8s" TEST_PROJECTS=""
+      env: PROFILE="-Phadoop-2.9" BUILD_FLAG="clean package install -DskipTests" TEST_FLAG="verify -DskipRat -am" MODULES="" TEST_MODULES="-pl submarine-test/test-k8s" TEST_PROJECTS=""
 
     # Template disable by SUBMARINE-381
     #- name: Test submarine interpreter
@@ -193,7 +195,7 @@ matrix:
 
     - name: Test submarine distribution
       language: java
-      jdk: "openjdk8"
+      jdk: openjdk8
       dist: xenial
       env: PROFILE="-Phadoop-2.9" BUILD_FLAG="clean package install -DskipTests" TEST_FLAG="test -DskipRat" MODULES="-pl ${EXCLUDE_K8S}" TEST_MODULES="-pl ${EXCLUDE_K8S},${EXCLUDE_COMMON_RPC}" TEST_PROJECTS=""
 
@@ -214,7 +216,7 @@ matrix:
 
     - name: Test submarine-server
       language: java
-      jdk: "openjdk8"
+      jdk: openjdk8
       dist: xenial
       env: PROFILE="-Phadoop-2.9" BUILD_FLAG="clean package install -DskipTests" TEST_FLAG="test -DskipRat" MODULES="-pl ${EXCLUDE_K8S},${EXCLUDE_WORKBENCH},${EXCLUDE_INTERPRETER}" TEST_MODULES="-pl org.apache.submarine:server-core" TEST_PROJECTS=""
 
diff --git a/dev-support/docker-images/database/build.sh b/dev-support/docker-images/database/build.sh
index 2d83a7f..218fe00 100755
--- a/dev-support/docker-images/database/build.sh
+++ b/dev-support/docker-images/database/build.sh
@@ -15,24 +15,25 @@
 # limitations under the License.
 
 set -eo pipefail
+set -x
 
 if [ -L ${BASH_SOURCE-$0} ]; then
   PWD=$(dirname $(readlink "${BASH_SOURCE-$0}"))
 else
   PWD=$(dirname ${BASH_SOURCE-$0})
 fi
-export BUILD_PATH=$(cd "${PWD}">/dev/null; pwd)
-SUBMARINE_HOME=${BUILD_PATH}/../../..
+export CURRENT_PATH=$(cd "${PWD}">/dev/null; pwd)
+SUBMARINE_HOME=${CURRENT_PATH}/../../..
 
-SUBMARINE_VERSION="0.3.0-SNAPSHOT"
+SUBMARINE_VERSION="0.4.0-SNAPSHOT"
 SUBMARINE_IMAGE_NAME="apache/submarine:database-${SUBMARINE_VERSION}"
 
-cp -rf "${SUBMARINE_HOME}/docs/database" "${BUILD_PATH}"
+cp -rf "${SUBMARINE_HOME}/docs/database" "${CURRENT_PATH}"
 
 # build image
-echo "Start building the submarine docker image ..."
-
+echo "Start building the ${SUBMARINE_IMAGE_NAME} docker image ..."
+cd ${CURRENT_PATH}
 docker build -t ${SUBMARINE_IMAGE_NAME} .
 
 # clean template file
-rm -rf ${BUILD_PATH}/database
+rm -rf ${CURRENT_PATH}/database
diff --git a/dev-support/docker-images/operator/Dockerfile b/dev-support/docker-images/operator/Dockerfile
index aa096fc..4a5b14d 100644
--- a/dev-support/docker-images/operator/Dockerfile
+++ b/dev-support/docker-images/operator/Dockerfile
@@ -21,6 +21,6 @@ RUN echo "http://mirrors.ustc.edu.cn/alpine/v3.10/main" > /etc/apk/repositories
 RUN echo "http://mirrors.ustc.edu.cn/alpine/v3.10/community" >> /etc/apk/repositories
 
 RUN apk add tzdata --no-cache
-ADD ./tmp/submarine-operator_linux /usr/local/bin/submarine-operator_linux
+ADD ./tmp/submarine-operator /usr/local/bin/submarine-operator
 
-ENTRYPOINT [ "/usr/local/bin/submarine-operator_linux" ]
+ENTRYPOINT [ "/usr/local/bin/submarine-operator" ]
diff --git a/dev-support/docker-images/operator/build.sh b/dev-support/docker-images/operator/build.sh
index fd244c6..3a26703 100755
--- a/dev-support/docker-images/operator/build.sh
+++ b/dev-support/docker-images/operator/build.sh
@@ -15,8 +15,9 @@
 # limitations under the License.
 
 set -eo pipefail
+set -x
 
-SUBMARINE_VERSION=0.3.0-SNAPSHOT
+SUBMARINE_VERSION=0.4.0-SNAPSHOT
 SUBMARINE_IMAGE_NAME="apache/submarine:operator-${SUBMARINE_VERSION}"
 
 if [ -L ${BASH_SOURCE-$0} ]; then
@@ -27,19 +28,18 @@ fi
 export CURRENT_PATH=$(cd "${PWD}">/dev/null; pwd)
 export SUBMARINE_HOME=${CURRENT_PATH}/../../..
 
-if [ ! -d "${SUBMARINE_HOME}/submarine-cloud/target" ]; then
-  mkdir "${SUBMARINE_HOME}/submarine-cloud/target"
+if [ ! -d "${SUBMARINE_HOME}/submarine-cloud/bin" ]; then
+  mkdir "${SUBMARINE_HOME}/submarine-cloud/bin"
 fi
-submarine_operator_exists=$(find -L "${SUBMARINE_HOME}/submarine-cloud/target" -name "submarine-operator_linux")
+submarine_operator_exists=$(find -L "${SUBMARINE_HOME}/submarine-cloud/bin" -name "submarine-operator")
 # Build source code if the package doesn't exist.
 if [[ -z "${submarine_operator_exists}" ]]; then
   cd "${SUBMARINE_HOME}/submarine-cloud"
-  export GOOS=linux
-  mvn clean package -DskipTests
+  mvn package
 fi
 
 mkdir -p "${CURRENT_PATH}/tmp"
-cp ${SUBMARINE_HOME}/submarine-cloud/target/submarine-operator_linux "${CURRENT_PATH}/tmp"
+cp ${SUBMARINE_HOME}/submarine-cloud/bin/submarine-operator "${CURRENT_PATH}/tmp"
 
 # build image
 cd ${CURRENT_PATH}
diff --git a/dev-support/docker-images/submarine/Dockerfile b/dev-support/docker-images/submarine/Dockerfile
index 80091ec..d26c392 100644
--- a/dev-support/docker-images/submarine/Dockerfile
+++ b/dev-support/docker-images/submarine/Dockerfile
@@ -13,30 +13,25 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-FROM submarinehub/alpine:3.10
+FROM alpine:3.10
 MAINTAINER Apache Software Foundation <de...@submarine.apache.org>
 
-# Update apk repositories
-RUN echo "http://mirrors.ustc.edu.cn/alpine/v3.10/main" > /etc/apk/repositories
-RUN echo "http://mirrors.ustc.edu.cn/alpine/v3.10/community" >> /etc/apk/repositories
-
 # INSTALL openjdk
 RUN apk update && \
-    apk add --no-cache openjdk8 tzdata tini && \
+    apk add --no-cache openjdk8 tzdata bash tini && \
     cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
     echo Asia/Shanghai > /etc/timezone && \
     apk del tzdata && \
     rm -rf /tmp/* /var/cache/apk/*
 
-
 ENV JAVA_HOME /usr/lib/jvm/java-1.8-openjdk/jre
 
 # Install Submarine
 ADD ./tmp/submarine-dist-*.tar.gz /opt/
 RUN ln -s /opt/submarine-dist-* "/opt/submarine-current"
-RUN mv /opt/mysql-connector-java-*.jar /opt/submarine-current/lib/
 ADD ./tmp/submarine-site.xml "/opt/submarine-current/conf/"
 ADD ./tmp/submarine.sh "/opt/submarine-current/bin/"
+ADD ./tmp/mysql-connector-java-5.1.39.jar "/opt/submarine-current/lib/"
 
 WORKDIR /opt/submarine-current
 
diff --git a/dev-support/docker-images/submarine/build.sh b/dev-support/docker-images/submarine/build.sh
index 691af90..aa6625b 100755
--- a/dev-support/docker-images/submarine/build.sh
+++ b/dev-support/docker-images/submarine/build.sh
@@ -15,8 +15,9 @@
 # limitations under the License.
 
 set -eo pipefail
+set -x
 
-SUBMARINE_VERSION=0.3.0-SNAPSHOT
+SUBMARINE_VERSION=0.4.0-SNAPSHOT
 SUBMARINE_IMAGE_NAME="apache/submarine:server-${SUBMARINE_VERSION}"
 
 if [ -L ${BASH_SOURCE-$0} ]; then
@@ -40,6 +41,14 @@ fi
 mkdir -p "${CURRENT_PATH}/tmp"
 cp ${SUBMARINE_HOME}/submarine-dist/target/submarine-dist-${SUBMARINE_VERSION}*.tar.gz "${CURRENT_PATH}/tmp"
 
+# download mysql connect java
+MYSQL_VERSION=5.1.39
+MYSQL_JAR_URL="https://repo1.maven.org/maven2/mysql/mysql-connector-java/${MYSQL_VERSION}/mysql-connector-java-${MYSQL_VERSION}.jar"
+tmpfile=$(mktemp)
+trap "test -f $tmpfile && rm $tmpfile" RETURN
+curl -L -o $tmpfile ${MYSQL_JAR_URL}
+mv $tmpfile ${CURRENT_PATH}/tmp/mysql-connector-java-${MYSQL_VERSION}.jar
+
 # Replace the mysql jdbc.url in the submarine-site.xml file with the link name of the submarine container
 # `submarine-database` is submarine database container name
 cp ${SUBMARINE_HOME}/conf/submarine-site.xml "${CURRENT_PATH}/tmp/"
diff --git a/docs/development/IntegrationTest.md b/docs/development/IntegrationTest.md
index 0269333..100dc5a 100644
--- a/docs/development/IntegrationTest.md
+++ b/docs/development/IntegrationTest.md
@@ -1,31 +1,79 @@
-<!---      
-  Licensed 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. See accompanying LICENSE file.      
+<!---
+  Licensed 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. See accompanying LICENSE file.
 -->
 
 # IntegrationTest
 
-## Run the existing tests.
+Submarine now supports two kinds of integration tests.
+
+They are in the project's `submarine/submarine-test` directory, There are two modules, `e2e` and `test-k8s`.
+
+There are currently some differences between `e2e` and `test-k8s` in operation mode.
+
+Among them, `e2e` needs to deploy submarine locally, while `test-k8s` uses k8s to deploy submarine.
+
+These two different test methods can be applied to different test scenarios. (In the future, these two test methods may be combined or adjusted)
+
+## k8s test
+
+k8s test: When the user submits the code to his/her repository or the `apache/submarine` git repository, the travis test task will automatically start.
+
+test-k8s runs test cases in travis. It will first create a k8s cluster by using the kind tool in travis,
+
+and then compile and package the submarine project in `submarine-dist` directory to build a docker image.
+
+Then use this latest code to build a docker image and deploy a submarine system in k8s. Then run test case in the `test-k8s/..` directory.
+
+### Run k8s test in locally
+
+Executing the following command will perform the following actions:
+
+```
+mvn -Phadoop-2.9 clean package install -DskipTests verify -DskipRat -am -pl submarine-test/test-k8s
+```
+
+1. The submarine project will be compiled and packaged to generate `submarine-dist/target/submarine-<version>.tar.gz`
+2. Call the `submarine-cloud/hack/integration-test.sh` script
+
+    + Call the `build.sh` script under `submarine/dev-support/docker-images/` to generate the latest `submarine`, `database` and `operator` docker images.
+    + Call `submarine-cloud/hack/kind-cluster-build.sh` to create a k8s cluster
+    + Call `submarine-cloud/hack/deploy-submarine.sh` to deploy the submarine system in the k8s cluster using the latest `submarine`, `database` and `operator` docker images.
+    + Call the test cases in `submarine-test/test-k8s/` for testing.
+
+### Run k8s test in travis
+
+Each time a code is submitted, travis is automatically triggered for testing.
+
+## e2e test
+
+e2e tests can be ran both locally and in Travis
+
+Local testing: When developers perform e2e testing locally, they need to manually start the submarine server by executing bin / submarine-daemon.sh.
+
+Then you can manually runs test cases in the `e2e/test` directory in IDEA.
+
+### Run the existing tests.
 ##### Move to the working directroy.
 ```
 cd submarine/submarine-test/e2e
 ```
 ##### Compile & Run.
 
-> Following command will compile all files and run all files ending with "IT". 
+> Following command will compile all files and run all files ending with "IT".
 
-**If your workbench server is not working on port 32777 ([mini-submarine](https://github.com/apache/submarine/tree/master/dev-support/mini-submarine) maps the workbench port 8000 to 32777), please first modify the port in WebDriverManager.java line 61  to the port where your workbench run.** 
+**If your workbench server is not working on port 32777 ([mini-submarine](https://github.com/apache/submarine/tree/master/dev-support/mini-submarine) maps the workbench port 8000 to 32777), please first modify the port in WebDriverManager.java line 61  to the port where your workbench run.**
 
-*   Execute the following command in your host machine to get the port   
+*   Execute the following command in your host machine to get the port
 ```
 docker inspect --format='{{(index (index .NetworkSettings.Ports "8080/tcp") 0).HostPort}}' mini-submarine
 ```
@@ -50,9 +98,9 @@ Otherwise, it will show.
 BUILD FAILURE
 ```
 
-## Add your own integration test
+### Add your own integration test
 1. Create new file ending with "IT" under "submarine/submarine-test/e2e/src/test/java/org/apache/submarine/integration/".
-2. Your public class is recommended to extend AbstractSubmarineIT. The class AbstractSubmarineIT contains some commonly used functions. 
+2. Your public class is recommended to extend AbstractSubmarineIT. The class AbstractSubmarineIT contains some commonly used functions.
 ```java
   WebElement pollingWait(final By locator, final long timeWait); // Find element on the website.
   void clickAndWait(final By locator); // Click element and wait for 1 second.
diff --git a/pom.xml b/pom.xml
index 3885fd4..486728b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -138,8 +138,7 @@
   <modules>
     <module>submarine-commons</module>
     <module>submarine-client</module>
-    <!-- There is a problem with the submarine-cloud pom, the compilation is very slow, and it is temporarily closed
-    <module>submarine-cloud</module-->
+    <module>submarine-cloud</module>
     <module>submarine-server</module>
     <module>submarine-all</module>
     <module>submarine-workbench</module>
diff --git a/dev-support/docker-images/operator/Dockerfile b/submarine-cloud/Dockerfile
similarity index 83%
copy from dev-support/docker-images/operator/Dockerfile
copy to submarine-cloud/Dockerfile
index aa096fc..24294d9 100644
--- a/dev-support/docker-images/operator/Dockerfile
+++ b/submarine-cloud/Dockerfile
@@ -13,14 +13,21 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-FROM alpine:3.10
+FROM golang:1.13-alpine
 MAINTAINER Apache Software Foundation <de...@submarine.apache.org>
 
 # Update apk repositories
 RUN echo "http://mirrors.ustc.edu.cn/alpine/v3.10/main" > /etc/apk/repositories
 RUN echo "http://mirrors.ustc.edu.cn/alpine/v3.10/community" >> /etc/apk/repositories
+RUN apk add make --no-cache
 
-RUN apk add tzdata --no-cache
-ADD ./tmp/submarine-operator_linux /usr/local/bin/submarine-operator_linux
+ENV GOPROXY https://goproxy.io
+ENV GO111MODULE on
 
-ENTRYPOINT [ "/usr/local/bin/submarine-operator_linux" ]
+WORKDIR /go/cache
+
+ADD go.mod .
+ADD go.sum .
+RUN go mod download
+
+# docker build -t apache/submarine:build .
diff --git a/submarine-cloud/Makefile b/submarine-cloud/Makefile
index 8cedcf5..61f7697 100644
--- a/submarine-cloud/Makefile
+++ b/submarine-cloud/Makefile
@@ -20,8 +20,7 @@ GOCLEAN=$(GOCMD) clean
 GOTEST=$(GOCMD) test
 GOGET=$(GOCMD) get
 BINARY_NAME=submarine-operator
-BINARY_UNIX=$(BINARY_NAME)_unix
-VERSION="0.3.0-SNAPSHOT"
+VERSION="0.4.0-SNAPSHOT"
 BuildGitBranch=$(git rev-parse --abbrev-ref HEAD)
 BuildGitRev=$(git rev-list --count HEAD)
 BuildGitCommit=$(git rev-parse HEAD)
@@ -34,20 +33,19 @@ LDFLAGS		:= -s -w \
 
 .PHONY: build
 build:
-	$(GOBUILD) -o ./bin/$(BINARY_NAME) -v cmd/operator/main.go
+	GOOS=${GOOS} GOARCH=amd64 $(GOBUILD) -o ./bin/$(BINARY_NAME) -v cmd/operator/main.go
 
 test:
-	$(GOTEST) -v ./...
+	#$(GOTEST) -v ./...
 
 all: test build
 
 clean:
 	$(GOCLEAN)
-	rm -f ./$(BINARY_NAME)-$(VERSION)
-	rm -f ./$(BINARY_UNIX)-$(VERSION)
+	rm -f ./bin/$(BINARY_NAME)
 
 fmt:
 	@go fmt $(CURDIR)/...
 
 release:
-	CGO_ENABLED=0 GOOS=${GOOS} GOARCH=amd64 $(GOBUILD) -a -installsuffix cgo -ldflags "$(LDFLAGS)" -o ./$(BINARY_UNIX)-linux-amd64-$(VERSION) -v cmd/operator/main.go
+	CGO_ENABLED=0 GOOS=${GOOS} GOARCH=amd64 $(GOBUILD) -a -installsuffix cgo -ldflags "$(LDFLAGS)" -o ./bin/$(BINARY_NAME) -v cmd/operator/main.go
diff --git a/submarine-cloud/build-submarine-operator.sh b/submarine-cloud/build-submarine-operator.sh
deleted file mode 100755
index c48ca2b..0000000
--- a/submarine-cloud/build-submarine-operator.sh
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/bin/bash
-#
-# 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.
-#
-if [ -L ${BASH_SOURCE-$0} ]; then
-  BIN=$(dirname $(readlink "${BASH_SOURCE-$0}"))
-else
-  BIN=$(dirname ${BASH_SOURCE-$0})
-fi
-export BIN=$(cd "${BIN}">/dev/null; pwd)
-
-echo "BIN=$BIN"
-
-cd ${BIN}/>/dev/null
-
-rm -R target
-mkdir target
-cd src
-go build -o ../target/
diff --git a/dev-support/docker-images/database/build.sh b/submarine-cloud/build.sh
similarity index 64%
copy from dev-support/docker-images/database/build.sh
copy to submarine-cloud/build.sh
index 2d83a7f..03f910b 100755
--- a/dev-support/docker-images/database/build.sh
+++ b/submarine-cloud/build.sh
@@ -1,4 +1,5 @@
 #!/bin/bash
+#
 # 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.
@@ -6,33 +7,29 @@
 # (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
+#    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.
-
-set -eo pipefail
+#
+set -e
 
 if [ -L ${BASH_SOURCE-$0} ]; then
   PWD=$(dirname $(readlink "${BASH_SOURCE-$0}"))
 else
   PWD=$(dirname ${BASH_SOURCE-$0})
 fi
-export BUILD_PATH=$(cd "${PWD}">/dev/null; pwd)
-SUBMARINE_HOME=${BUILD_PATH}/../../..
-
-SUBMARINE_VERSION="0.3.0-SNAPSHOT"
-SUBMARINE_IMAGE_NAME="apache/submarine:database-${SUBMARINE_VERSION}"
+export CURRENT_PATH=$(cd "${PWD}">/dev/null; pwd)
+cd $CURRENT_PATH
 
-cp -rf "${SUBMARINE_HOME}/docs/database" "${BUILD_PATH}"
-
-# build image
-echo "Start building the submarine docker image ..."
-
-docker build -t ${SUBMARINE_IMAGE_NAME} .
-
-# clean template file
-rm -rf ${BUILD_PATH}/database
+echo "${1} submarine-cloud by docker ..."
+if [[ "${1}"x == "test"x ]]; then
+  echo "Test submarine-cloud by docker ..."
+elif [ "${1}"x == "clean"x ]; then
+  rm -rf ./bin
+else
+  docker run --rm -v "$CURRENT_PATH":/go/src/submarine-cloud -w /go/src/submarine-cloud -e GOOS="${GOOS:-darwin}" -e GOARCH="${GOARCH:-amd64}" apache/submarine:build make ${1}
+fi;
diff --git a/submarine-cloud/go.mod b/submarine-cloud/go.mod
index 1a0ec08..71dc0c8 100644
--- a/submarine-cloud/go.mod
+++ b/submarine-cloud/go.mod
@@ -2,7 +2,7 @@
 
 module github.com/apache/submarine/submarine-cloud
 
-go 1.12
+go 1.13
 
 require (
 	github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b
diff --git a/submarine-cloud/hack/deploy-submarine.sh b/submarine-cloud/hack/deploy-submarine.sh
index 23571a6..62deb44 100755
--- a/submarine-cloud/hack/deploy-submarine.sh
+++ b/submarine-cloud/hack/deploy-submarine.sh
@@ -20,6 +20,7 @@ set -e
 ROOT=$(unset CDPATH && cd $(dirname "${BASH_SOURCE[0]}")/.. && pwd)
 cd $ROOT
 SUBMARINE_HOME=${ROOT}/..
+SUBMARINE_VERSION="0.4.0-SNAPSHOT"
 
 source $ROOT/hack/lib.sh
 
@@ -58,26 +59,24 @@ function install_submarine() {
     fi
     $KUBECTL_BIN create configmap --namespace default submarine-config --from-file=${ROOT}/hack/conf/submarine-site.xml --from-file=${ROOT}/hack/conf/log4j.properties
 
-    if ! docker inspect apache/submarine:operator-0.3.0-SNAPSHOT >/dev/null ; then
-      docker pull apache/submarine:operator-0.3.0-SNAPSHOT
+    if ! docker inspect apache/submarine:operator-${SUBMARINE_VERSION} >/dev/null ; then
+      docker pull apache/submarine:operator-${SUBMARINE_VERSION}
     fi
-    $KIND_BIN load docker-image apache/submarine:operator-0.3.0-SNAPSHOT
+    $KIND_BIN load docker-image apache/submarine:operator-${SUBMARINE_VERSION}
     $KUBECTL_BIN apply -f $ROOT/manifests/submarine-operator/
 
-    if ! docker inspect apache/submarine:database-0.3.0-SNAPSHOT >/dev/null ; then
-      docker pull apache/submarine:database-0.3.0-SNAPSHOT
+    if ! docker inspect apache/submarine:database-${SUBMARINE_VERSION} >/dev/null ; then
+      docker pull apache/submarine:database-${SUBMARINE_VERSION}
     fi
-    $KIND_BIN load docker-image apache/submarine:database-0.3.0-SNAPSHOT
+    $KIND_BIN load docker-image apache/submarine:database-${SUBMARINE_VERSION}
 
-    if ! docker inspect apache/submarine:server-0.3.0-SNAPSHOT >/dev/null ; then
-      docker pull apache/submarine:server-0.3.0-SNAPSHOT
+    if ! docker inspect apache/submarine:server-${SUBMARINE_VERSION} >/dev/null ; then
+      docker pull apache/submarine:server-${SUBMARINE_VERSION}
     fi
-    $KIND_BIN load docker-image apache/submarine:server-0.3.0-SNAPSHOT
+    $KIND_BIN load docker-image apache/submarine:server-${SUBMARINE_VERSION}
     $KUBECTL_BIN apply -f $ROOT/manifests/submarine-cluster/
 
-    cat <<EOF
-NOTE: You can open your browser and access the submarine workbench at http://127.0.0.1/
-EOF
+    echo "NOTE: You can open your browser and access the submarine workbench at http://127.0.0.1/"
   fi
 }
 
diff --git a/submarine-cloud/hack/integration-test.sh b/submarine-cloud/hack/integration-test.sh
index 714e199..b9925f5 100755
--- a/submarine-cloud/hack/integration-test.sh
+++ b/submarine-cloud/hack/integration-test.sh
@@ -15,32 +15,120 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-set -e
+set -eo pipefail
+set -x
 
 ROOT=$(unset CDPATH && cd $(dirname "${BASH_SOURCE[0]}")/.. && pwd)
 cd $ROOT
 SUBMARINE_HOME=${ROOT}/..
 
+source $ROOT/hack/lib.sh
+
+hack::ensure_kubectl
+
+export KUBECONFIG=~/.kube/kind-config-${clusterName:-kind}
+
 function start() {
   $ROOT/hack/kind-cluster-build.sh
   $ROOT/hack/deploy-submarine.sh --test
 
-  for((i=1;i<=100;i++)); do
-    if curl http://127.0.0.1/api/v1/cluster/address | grep \"status\":\"OK\" ; then
-      echo "Cluster start success!"
-      exit;
+  for((i=1;i<=30;i++)); do
+    info=`curl -s -m 10 --connect-timeout 10 -I http://127.0.0.1/api/v1/cluster/address`
+    code=`echo $info | grep "HTTP" | awk '{print $2}'`
+
+    #############  DON'T DELETE NEXT DEBUG COMAND  #############
+    # $KUBECTL_BIN get node
+    # $KUBECTL_BIN get pods
+    # $KUBECTL_BIN get svc
+    # podname=`$KUBECTL_BIN get pods | grep submarinecluster-submarine | awk '{print $1}'`
+    # $KUBECTL_BIN describe pod $podname
+    # $KUBECTL_BIN logs $podname
+    ############################################################
+
+    if [ "$code" == "200" ];then
+        echo "Start submarine on k8s success!"
+        exit;
+    else
+        echo "Request failed with response code = $code"
     fi
     sleep 3
   done
 
-  echo "Cluster start failure!"
+  #############  DON'T DELETE NEXT DEBUG COMAND  #############
+  # $KUBECTL_BIN get node
+  # podname=`$KUBECTL_BIN get pods | grep submarinecluster-submarine | awk '{print $1}'`
+  # $KUBECTL_BIN describe pod $podname
+  # $KUBECTL_BIN exec -it $podname cat /opt/submarine-current/logs/submarine.log
+  # $KUBECTL_BIN exec $podname -- bash -c "tail -500 /opt/submarine-current/logs/submarine.log"
+  # $KUBECTL_BIN get pods | grep submarinecluster-submarine | awk '{print $1}' | xargs -I {} $KUBECTL_BIN exec {} -- bash -c "tail -500 /opt/submarine-current/logs/submarine.log"
+  # kubectl get pods -n operations | grep operations | awk '{print $1}' | xargs -I {} kubectl exec -it -n operations {} cat /tmp/operations-server.INFO
+  ############################################################
+  echo "Stop submarine on k8s failure!"
 }
 
 function stop() {
   $ROOT/hack/kind delete cluster
 }
 
-if [[ "$1" == "stop" ]]; then
+function update_docker_images() {
+  $SUBMARINE_HOME/dev-support/docker-images/database/build.sh
+  $SUBMARINE_HOME/dev-support/docker-images/operator/build.sh
+  $SUBMARINE_HOME/dev-support/docker-images/submarine/build.sh
+
+  docker images
+}
+
+usage() {
+    cat <<EOF
+This script use kind to create Kubernetes cluster and deploy submarine to k8s
+
+Options:
+       -h,--help          prints the usage message
+       -s,--start         Create k8s and start submarine
+       -t,--stop          Delete k8s cluster and submarine
+       -u,--update        update submarine docker image
+Usage:
+    $0 --start --update
+EOF
+}
+
+while [[ $# -gt 0 ]]
+do
+key="$1"
+
+case $key in
+    -s|--start)
+    OPERATION="START"
+    shift
+    ;;
+    -t|--stop)
+    OPERATION="STOP"
+    shift
+    ;;
+    -u|--update)
+    UPDATE_IAMGE="TRUE"
+    shift
+    ;;
+    -h|--help)
+    usage
+    exit 0
+    ;;
+    *)
+    echo "unknown option: $key"
+    usage
+    exit 1
+    ;;
+esac
+done
+
+OPERATION=${OPERATION:-""}
+UPDATE_IAMGE=${UPDATE_IAMGE:-""}
+
+if [[ $UPDATE_IAMGE == "TRUE" ]]; then
+  update_docker_images
+fi
+
+if [[ $OPERATION == "STOP" ]]; then
   stop
 else
   start
diff --git a/submarine-cloud/manifests/submarine-cluster/submarine-database.yaml b/submarine-cloud/manifests/submarine-cluster/submarine-database.yaml
index 070338c..b11e609 100644
--- a/submarine-cloud/manifests/submarine-cluster/submarine-database.yaml
+++ b/submarine-cloud/manifests/submarine-cluster/submarine-database.yaml
@@ -30,7 +30,7 @@ spec:
     spec:
       containers:
         - name: submarine-database
-          image: apache/submarine:database-0.3.0-SNAPSHOT
+          image: apache/submarine:database-0.4.0-SNAPSHOT
           ports:
             - containerPort: 3306
           env:
diff --git a/submarine-cloud/manifests/submarine-cluster/submarine-server.yaml b/submarine-cloud/manifests/submarine-cluster/submarine-server.yaml
index b9a0819..bf3dbb1 100644
--- a/submarine-cloud/manifests/submarine-cluster/submarine-server.yaml
+++ b/submarine-cloud/manifests/submarine-cluster/submarine-server.yaml
@@ -31,7 +31,7 @@ spec:
       ServiceAccountName: "submarine-node"
       containers:
         - name: submarine-node
-          image: "apache/submarine:server-0.3.0-SNAPSHOT"
+          image: "apache/submarine:server-0.4.0-SNAPSHOT"
           args: []
           imagePullPolicy: IfNotPresent
           ports:
@@ -56,7 +56,7 @@ spec:
             timeoutSeconds: 5
             periodSeconds: 10
             successThreshold: 1
-            failureThreshold: 30
+            failureThreshold: 3
           readinessProbe:
             httpGet:
               path: /api/v1/cluster/address
diff --git a/submarine-cloud/manifests/submarine-operator/deployment.yaml b/submarine-cloud/manifests/submarine-operator/deployment.yaml
index 38d3bd0..6153c43 100644
--- a/submarine-cloud/manifests/submarine-operator/deployment.yaml
+++ b/submarine-cloud/manifests/submarine-operator/deployment.yaml
@@ -31,7 +31,7 @@ spec:
       serviceAccountName: "submarine-operator"
       containers:
         - name: op
-          image: "apache/submarine:operator-0.3.0-SNAPSHOT"
+          image: "apache/submarine:operator-0.4.0-SNAPSHOT"
           imagePullPolicy: IfNotPresent
           args: ["--v=7", "--logtostderr=true", "--alsologtostderr"]
           resources:
diff --git a/submarine-cloud/pom.xml b/submarine-cloud/pom.xml
index a7ebe45..5fe3341 100644
--- a/submarine-cloud/pom.xml
+++ b/submarine-cloud/pom.xml
@@ -25,79 +25,71 @@
   <parent>
     <groupId>org.apache.submarine</groupId>
     <artifactId>submarine</artifactId>
-    <version>0.3.0-SNAPSHOT</version>
+    <version>0.4.0-SNAPSHOT</version>
   </parent>
   <artifactId>submarine-cloud</artifactId>
-  <version>0.3.0-SNAPSHOT</version>
+  <version>0.4.0-SNAPSHOT</version>
   <name>Submarine: Cloud</name>
   <packaging>pom</packaging>
 
   <build>
-    <sourceDirectory>${basedir}/cmd/operator</sourceDirectory>
-    <directory>${basedir}/target</directory>
     <plugins>
       <plugin>
-        <groupId>com.igormaznitsa</groupId>
-        <artifactId>mvn-golang-wrapper</artifactId>
-        <version>2.3.4</version>
-        <extensions>true</extensions>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>exec-maven-plugin</artifactId>
+        <version>1.6.0</version>
         <executions>
-          <execution>
-            <id>execution-fmt</id>
+          <!--execution>
+            <id>compile-submarine-cloud</id>
             <phase>compile</phase>
             <goals>
-              <goal>fmt</goal>
+              <goal>exec</goal>
             </goals>
             <configuration>
-              <sources>${basedir}</sources>
+              <executable>${basedir}/build.sh</executable>
+              <commandlineArgs>build</commandlineArgs>
+              <environmentVariables>
+                <GOOS>darwin</GOOS>
+                <GOARCH>amd64</GOARCH>
+              </environmentVariables>
             </configuration>
-          </execution>
+          </execution-->
           <execution>
-            <id>execution-build</id>
-            <phase>compile</phase>
+            <id>package-submarine-cloud</id>
+            <phase>package</phase>
             <goals>
-              <goal>build</goal>
+              <goal>exec</goal>
             </goals>
             <configuration>
-              <targetOs>${GOOS}</targetOs> <!-- linux|darwin|windows -->
-              <resultName>submarine-operator_${GOOS}</resultName>
-              <ldFlags>
-                <flag>-X</flag>
-                <flag>'github.com/apache/submarine/submarine-cloud/pkg/utils.BUILDTIME=${maven.build.timestamp}'</flag>
-                <flag>-X</flag>
-                <flag>'github.com/apache/submarine/submarine-cloud/pkg/utils.TAG=$(git tag|tail -1)'</flag>
-                <!--flag>-X</flag>
-                <flag>"github.com/apache/submarine/submarine-cloud/pkg/utils.COMMIT=$(git rev-parse HEAD)"</flag>
-                <flag>-X</flag>
-                <flag>"github.com/apache/submarine/submarine-cloud/pkg/utils.VERSION=$(git rev-parse -abbrev-ref HEAD)"</flag-->
-              </ldFlags>
+              <executable>${basedir}/build.sh</executable>
+              <commandlineArgs>release</commandlineArgs>
+              <environmentVariables>
+                <GOOS>linux</GOOS>
+                <GOARCH>amd64</GOARCH>
+              </environmentVariables>
             </configuration>
           </execution>
-          <!--execution>
-            <id>get-k8s-api</id>
-            <phase>install</phase>
-            <goals>
-              <goal>get</goal>
-            </goals>
-            <configuration>
-              <packages>
-                <package>k8s.io/api</package>
-              </packages>
-            </configuration>
-          </execution-->
           <execution>
-            <id>execution-clean</id>
+            <id>clean-submarine-cloud</id>
             <phase>clean</phase>
             <goals>
-              <goal>clean</goal>
+              <goal>exec</goal>
             </goals>
+            <configuration>
+              <executable>${basedir}/build.sh</executable>
+              <commandlineArgs>clean</commandlineArgs>
+            </configuration>
           </execution>
           <execution>
-            <id>test</id>
+            <id>test-submarine-cloud</id>
             <phase>test</phase>
             <goals>
-              <goal>test</goal>
+              <goal>exec</goal>
             </goals>
+            <configuration>
+              <executable>${basedir}/build.sh</executable>
+              <commandlineArgs>test</commandlineArgs>
+            </configuration>
           </execution>
         </executions>
       </plugin>
diff --git a/submarine-dist/src/assembly/distribution.xml b/submarine-dist/src/assembly/distribution.xml
index 049146e..60484d0 100644
--- a/submarine-dist/src/assembly/distribution.xml
+++ b/submarine-dist/src/assembly/distribution.xml
@@ -87,6 +87,14 @@
       </excludes>
     </fileSet>
     <fileSet>
+      <directory>../docs/database</directory>
+      <outputDirectory>/docs/database</outputDirectory>
+    </fileSet>
+    <fileSet>
+      <directory>../dev-support/docker-images</directory>
+      <outputDirectory>/dev-support/docker-images</outputDirectory>
+    </fileSet>
+    <fileSet>
       <directory>../submarine-commons/commons-utils/target</directory>
       <outputDirectory>/lib</outputDirectory>
       <includes>
diff --git a/submarine-test/test-k8s/pom.xml b/submarine-test/test-k8s/pom.xml
index 33da4c5..f9bac95 100644
--- a/submarine-test/test-k8s/pom.xml
+++ b/submarine-test/test-k8s/pom.xml
@@ -111,12 +111,13 @@
         <artifactId>maven-antrun-plugin</artifactId>
         <executions>
           <execution>
-            <id>start-kind</id>
+            <id>start-integration-ks8-test</id>
             <phase>pre-integration-test</phase>
             <configuration>
               <target unless="skipTests">
                 <exec executable="./integration-test.sh" dir="${submarine.cloud.path}" spawn="false">
-                  <arg value="start"/>
+                  <arg value="--start"/>
+                  <arg value="--update"/>
                 </exec>
               </target>
             </configuration>
@@ -125,12 +126,12 @@
             </goals>
           </execution>
           <execution>
-            <id>stop-kind</id>
+            <id>stop-integration-ks8-test</id>
             <phase>post-integration-test</phase>
             <configuration>
               <target unless="skipTests">
                 <exec executable="./integration-test.sh" dir="${submarine.cloud.path}" spawn="false">
-                  <arg value="stop"/>
+                  <arg value="--stop"/>
                 </exec>
               </target>
             </configuration>
@@ -151,7 +152,7 @@
       </activation>
       <properties>
         <submarine.cloud.path>
-          ../../submarine-dist/target/submarine-dist-${project.version}-hadoop-2.9/submarine-dist-${project.version}-hadoop-2.9/submarine-cloud/hack
+          ../../submarine-cloud/hack
         </submarine.cloud.path>
       </properties>
     </profile>


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@submarine.apache.org
For additional commands, e-mail: dev-help@submarine.apache.org