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