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