diff --git a/.circleci/config.yml b/.circleci/config.yml
index 4aada86f..61266be5 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -17,31 +17,34 @@
orbs:
kube-orb: circleci/kubernetes@0.11.0
version: 2.1
+workflows:
+ version: 2
+ build-then-test:
+ jobs:
+ - build
+ - test:
+ requires:
+ - build
jobs:
- build:
+ test:
+ parallelism: 5 # parallel containers to split the tests among
machine: true
environment:
_JAVA_OPTIONS: "-Xms1024m -Xmx2048m"
_SERVICE_OCCURENCE: 5
steps:
- checkout
- - restore_cache:
- keys:
- - spring-cloud-kubernetes-{{ .Branch }}-{{ checksum "pom.xml" }}
- - spring-cloud-kubernetes-{{ .Branch }}
- - spring-cloud-kubernetes
- - run:
- name: dependencies
- command: |
- ./mvnw -s .settings.xml -U --fail-never dependency:go-offline -Dservice.occurence=${_SERVICE_OCCURENCE} || true
- - save_cache:
- paths:
- - ~/.m2
- key: spring-cloud-kubernetes-{{ .Branch }}-{{ checksum "pom.xml" }}
- run:
name: Run regular tests
command: |
- ./mvnw -s .settings.xml clean install -Dservice.occurence=${_SERVICE_OCCURENCE} #org.jacoco:jacoco-maven-plugin:prepare-agent install -U -P sonar -nsu --batch-mode -Dmaven.test.redirectTestOutputToFile=true -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
+ CLASSNAMES=$(circleci tests glob "**/src/test/**/**.java" | grep -v 'spring-cloud-kubernetes-integration-tests' \
+ | sed 's/.*src.test.java.//g' | sed 's@/@.@g' \
+ | sed 's/.\{5\}$//' \
+ | circleci tests split --split-by=timings --timings-type=classname)
+ echo $CLASSNAMES
+ TEST_ARG=$(echo $CLASSNAMES | sed 's/ /,/g')
+ echo $TEST_ARG
+ ./mvnw -s .settings.xml -DfailIfNoTests=false -Dtest=$TEST_ARG -e clean org.jacoco:jacoco-maven-plugin:prepare-agent test -U -P sonar -nsu --batch-mode -Dmaven.test.redirectTestOutputToFile=true -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
mkdir -p $HOME/artifacts/junit/
find . -type f -regex ".*/spring-cloud-*.*/target/*.*" -exec cp {} $HOME/artifacts/ \;
find . -type f -regex ".*/target/.*-reports/.*" -exec cp {} $HOME/artifacts/junit/ \;
@@ -52,6 +55,12 @@ jobs:
sudo apt update
sudo apt install snapd
- kube-orb/install-kubectl
+ - attach_workspace:
+ at: ./
+ - run:
+ name: Load Controller Images From Workspace
+ command: |
+ docker load -i ./docker-images/spring-cloud-kubernetes-configuration-watcher.tar
- run:
name: Run Kind Integration Tests
command: |
@@ -125,6 +134,40 @@ jobs:
- store_test_results:
path: ~/junit/
destination: testartifacts
+ build:
+ machine: true
+ environment:
+ _JAVA_OPTIONS: "-Xms1024m -Xmx2048m"
+ _SERVICE_OCCURENCE: 5
+ steps:
+ - checkout
+ - restore_cache:
+ keys:
+ - spring-cloud-kubernetes-{{ .Branch }}-{{ checksum "pom.xml" }}
+ - spring-cloud-kubernetes-{{ .Branch }}
+ - spring-cloud-kubernetes
+ - run:
+ name: dependencies
+ command: |
+ ./mvnw -s .settings.xml -U --fail-never dependency:go-offline -Dservice.occurence=${_SERVICE_OCCURENCE} || true
+ - run:
+ name: build
+ command: |
+ ./mvnw -s .settings.xml clean install -Dservice.occurence=${_SERVICE_OCCURENCE} -DskipTests
+ - run:
+ name: save docker images
+ command: |
+ TAG=$(./mvnw -q -Dexec.executable=echo -Dexec.args='${project.version}' --non-recursive exec:exec)
+ echo $TAG
+ mkdir docker-images
+ docker save -o docker-images/spring-cloud-kubernetes-configuration-watcher.tar docker.io/springcloud/spring-cloud-kubernetes-configuration-watcher:${TAG}
+ - persist_to_workspace:
+ root: ./
+ paths: docker-images
+ - save_cache:
+ paths:
+ - ~/.m2
+ key: spring-cloud-kubernetes-{{ .Branch }}-{{ checksum "pom.xml" }}
notify:
webhooks:
- url: https://webhooks.gitter.im/e/22e6bb4eb945dd61ba54
diff --git a/pom.xml b/pom.xml
index 3c0c7946..191dae7c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -202,10 +202,8 @@
${maven-surefire-plugin.version}
true
- 1
+ all
false
-
- false
@@ -319,5 +317,51 @@
+
+ sonar
+
+
+
+ org.jacoco
+ jacoco-maven-plugin
+
+
+ pre-unit-test
+
+ prepare-agent
+
+
+ surefireArgLine
+ ${project.build.directory}/jacoco.exec
+
+
+
+
+ post-unit-test
+ test
+
+ report
+
+
+
+ ${project.build.directory}/jacoco.exec
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ all
+ false
+
+ ${surefireArgLine}
+
+
+
+
+
diff --git a/spring-cloud-kubernetes-integration-tests/run.sh b/spring-cloud-kubernetes-integration-tests/run.sh
index 8879c82f..d6dcc0b3 100755
--- a/spring-cloud-kubernetes-integration-tests/run.sh
+++ b/spring-cloud-kubernetes-integration-tests/run.sh
@@ -119,17 +119,33 @@ main() {
#"${ISTIOCTL}" install --set profile=demo
# running tests..
- for p in "${INTEGRATION_PROJECTS[@]}"; do
- echo "Running test: $p"
- cd $p
- ${MVN} spring-boot:build-image \
- -Dspring-boot.build-image.imageName=docker.io/springcloud/$p:${MVN_VERSION} -Dspring-boot.build-image.builder=paketobuildpacks/builder
- "${KIND}" load docker-image docker.io/springcloud/$p:${MVN_VERSION}
- ${MVN} clean install -P it
- cd ..
- done
+ if [[ $CIRCLECI ]]; then
+ #This splits projects across all circleci instances, it returns a list of projects separated by a space
+ SPLIT_PROJECTS=$(printf "%s\n" "${INTEGRATION_PROJECTS[@]}" | circleci tests split)
+ SPLIT_PROJECTS=$(echo $SPLIT_PROJECTS | sed 's/ /,/g')
+ echo "split tests $SPLIT_PROJECTS"
+ #This splits the projects back into an array so we can iterate over them
+ IFS=',' read -ra PROJECTS <<< "$SPLIT_PROJECTS"
+ echo "projects $PROJECTS"
+ run_tests "${PROJECTS[@]}"
+ else
+ run_tests "${INTEGRATION_PROJECTS[@]}"
+ fi
# teardown will happen automatically on exit
}
+run_tests() {
+ arr=("$@")
+ for p in "${arr[@]}"; do
+ echo "Running test: $p"
+ cd $p
+ ${MVN} spring-boot:build-image \
+ -Dspring-boot.build-image.imageName=docker.io/springcloud/$p:${MVN_VERSION} -Dspring-boot.build-image.builder=paketobuildpacks/builder
+ "${KIND}" load docker-image docker.io/springcloud/$p:${MVN_VERSION}
+ ${MVN} clean install -P it
+ cd ..
+ done
+}
+
main