|
1 | 1 | version: 2 |
2 | 2 | jobs: |
3 | 3 | build: |
4 | | - |
5 | | - working_directory: ~/circleci-demo-java-spring |
6 | | - |
| 4 | + # Remove if parallelism is not desired |
| 5 | + parallelism: 2 |
| 6 | + environment: |
| 7 | + # Configure the JVM and Gradle to avoid OOM errors |
| 8 | + _JAVA_OPTIONS: "-Xmx3g" |
| 9 | + GRADLE_OPTS: "-Dorg.gradle.daemon=false -Dorg.gradle.workers.max=2" |
7 | 10 | docker: |
8 | | - - image: circleci/openjdk:8-jdk-stretch |
9 | | - - image: circleci/postgres:9.6.3-alpine |
| 11 | + - image: circleci/openjdk:11.0.3-jdk-stretch |
| 12 | + - image: circleci/postgres:12-alpine |
10 | 13 | environment: |
11 | | - POSTGRES_USER: root |
| 14 | + POSTGRES_USER: postgres |
12 | 15 | POSTGRES_DB: circle_test |
13 | | - |
14 | 16 | steps: |
15 | | - |
16 | 17 | - checkout |
17 | | - |
18 | 18 | - restore_cache: |
19 | | - key: circleci-demo-java-spring-{{ checksum "pom.xml" }} |
20 | | - |
21 | | - - run: mvn dependency:go-offline |
22 | | - |
| 19 | + key: v1-gradle-wrapper-{{ checksum "gradle/wrapper/gradle-wrapper.properties" }} |
| 20 | + - restore_cache: |
| 21 | + key: v1-gradle-cache-{{ checksum "build.gradle" }} |
| 22 | + - run: |
| 23 | + name: Run tests in parallel |
| 24 | + # Use "./gradlew test" instead if tests are not run in parallel |
| 25 | + command: | |
| 26 | + cd src/test/java |
| 27 | + # Get list of classnames of tests that should run on this node |
| 28 | + CLASSNAMES=$(circleci tests glob "**/*.java" \ |
| 29 | + | cut -c 1- | sed 's@/@.@g' \ |
| 30 | + | sed 's/.\{5\}$//' \ |
| 31 | + | circleci tests split --split-by=timings --timings-type=classname) |
| 32 | + cd ../../.. |
| 33 | + # Format the arguments to "./gradlew test" |
| 34 | + GRADLE_ARGS=$(echo $CLASSNAMES | awk '{for (i=1; i<=NF; i++) print "--tests",$i}') |
| 35 | + echo "Prepared arguments for Gradle: $GRADLE_ARGS" |
| 36 | + ./gradlew test $GRADLE_ARGS |
23 | 37 | - save_cache: |
24 | 38 | paths: |
25 | | - - ~/.m2 |
26 | | - key: circleci-demo-java-spring-{{ checksum "pom.xml" }} |
27 | | - |
28 | | - - run: mvn package |
29 | | - |
| 39 | + - ~/.gradle/wrapper |
| 40 | + key: v1-gradle-wrapper-{{ checksum "gradle/wrapper/gradle-wrapper.properties" }} |
| 41 | + - save_cache: |
| 42 | + paths: |
| 43 | + - ~/.gradle/caches |
| 44 | + key: v1-gradle-cache-{{ checksum "build.gradle" }} |
30 | 45 | - store_test_results: |
31 | | - path: target/surefire-reports |
32 | | - |
| 46 | + path: build/test-results/test |
33 | 47 | - store_artifacts: |
34 | | - path: target/demo-java-spring-0.0.1-SNAPSHOT.jar |
| 48 | + path: build/test-results/test |
| 49 | + when: always |
| 50 | + - run: |
| 51 | + name: Assemble JAR |
| 52 | + command: | |
| 53 | + # Skip this for other nodes |
| 54 | + if [ "$CIRCLE_NODE_INDEX" == 0 ]; then |
| 55 | + ./gradlew assemble |
| 56 | + fi |
| 57 | + # This will be empty for all nodes except the first one |
| 58 | + - store_artifacts: |
| 59 | + path: build/libs |
| 60 | + |
0 commit comments