diff --git a/README.md b/README.md index d9e569c9ad36815d3f54a6e8ebb0ec2edbf99987..453d89243027b7f0d2a7a14083e17cd6904371a1 100644 --- a/README.md +++ b/README.md @@ -24,11 +24,14 @@ The Maven template uses some global configuration used throughout all jobs. | `MAVEN_IMAGE` | The Docker image used to run Maven | `maven:latest` | | `MAVEN_CFG_DIR` | The Maven configuration directory | `.m2` | | `MAVEN_OPTS` | [Global Maven options](http://maven.apache.org/configure.html#maven_opts-environment-variable) | `-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=${MAVEN_CFG_DIR}/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true` | -| `MAVEN_CLI_OPTS` | Additional [Maven options](https://maven.apache.org/ref/3-LATEST/maven-embedder/cli.html) used on the command line | `--batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true -s ${MAVEN_CFG_DIR}/settings.xml` | +| `MAVEN_CLI_OPTS` | Additional [Maven options](https://maven.apache.org/ref/3-LATEST/maven-embedder/cli.html) used on the command line | `--batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true` | -As you can see, your local Maven settings file is supposed to be located in `${MAVEN_CFG_DIR}/settings.xml`. +### About `$MAVEN_CFG_DIR` -The cache policy also declares the `${MAVEN_CFG_DIR}/repository` directory as cached (not to download Maven dependencies over and over again). +This variable is used to define the Maven configuration directory. It is used for 2 purposes: + +* in case a Maven settings file (`settings.xml`) is found, the template automatically uses it (using the `-s` option on command line), +* the cache policy declares the `${MAVEN_CFG_DIR}/repository` directory as cached (not to download Maven dependencies over and over again). If you have a good reason to do differently, you'll have to override the `MAVEN_CLI_OPTS` variable as well as the [`cache`](https://docs.gitlab.com/ee/ci/yaml/README.html#cache) policy. diff --git a/kicker.json b/kicker.json index 5f0fdf67ab2cd98c9eb70afe44cd191c2a5a027d..16fa97ac321437256b3c7f5b3e296d7c7544535a 100644 --- a/kicker.json +++ b/kicker.json @@ -24,7 +24,7 @@ { "name": "MAVEN_CLI_OPTS", "description": "Additional [Maven options](https://maven.apache.org/ref/3-LATEST/maven-embedder/cli.html) used on the command line", - "default": "--batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true -s ${MAVEN_CFG_DIR}/settings.xml", + "default": "--batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true", "advanced": true }, { diff --git a/templates/gitlab-ci-maven.yml b/templates/gitlab-ci-maven.yml index 3f5fcf270014c82849a9fcb20c1f638ffd14bf2e..79eb32c211af23fcb1d8b3aa7048fcfa91baf2c4 100644 --- a/templates/gitlab-ci-maven.yml +++ b/templates/gitlab-ci-maven.yml @@ -44,7 +44,6 @@ variables: --show-version -DinstallAtEnd=true -DdeployAtEnd=true - -s ${MAVEN_CFG_DIR}/settings.xml # Maven build arguments MAVEN_BUILD_ARGS: "org.jacoco:jacoco-maven-plugin:prepare-agent verify org.jacoco:jacoco-maven-plugin:report" @@ -198,7 +197,7 @@ stages: # change version in pom # shellcheck disable=SC2086 - mvn versions:set $MAVEN_CLI_OPTS $java_proxy_args -DgenerateBackupPoms=false -DnewVersion="$cur_version-SNAPSHOT" + mvn versions:set $MAVEN_CLI_OPTS $mvn_settings_opt $java_proxy_args -DgenerateBackupPoms=false -DnewVersion="$cur_version-SNAPSHOT" # git commit change git commit -am "[ci skip] Prepare release with $cur_version version" @@ -207,7 +206,7 @@ stages: function configure_scm_auth() { # shellcheck disable=SC2086 - scm_url=$(mvn $MAVEN_CLI_OPTS $java_proxy_args org.apache.maven.plugins:maven-help-plugin:3.2.0:evaluate -Dexpression=project.scm.developerConnection -q -DforceStdout | tail -n 1) + scm_url=$(mvn $MAVEN_CLI_OPTS $mvn_settings_opt $java_proxy_args org.apache.maven.plugins:maven-help-plugin:3.2.0:evaluate -Dexpression=project.scm.developerConnection -q -DforceStdout | tail -n 1) if [[ $scm_url == "scm:git:https"* ]]; then if [[ -n "${GIT_USERNAME}" ]] && [[ -n "${GIT_PASSWORD}" ]]; then log_info "--- using SCM credentials from env (\$GIT_USERNAME and \$GIT_PASSWORD)..." @@ -393,6 +392,15 @@ stages: fi } + # autodetects any Maven settings file in $MAVEN_CFG_DIR and builds the Java CLI option accordingly + function eval_mvn_settings_opt() { + if [[ -f "$MAVEN_CFG_DIR/settings.xml" ]] + then + log_info "Maven settings file found: \\e[33;1m$MAVEN_CFG_DIR/settings.xml\\e[0m" + mvn_settings_opt="-s $MAVEN_CFG_DIR/settings.xml" + fi + } + function get_latest_template_version() { tag_json=$(curl -s --connect-timeout 5 "$CI_API_V4_URL/projects/to-be-continuous%2F$1/repository/tags?per_page=1" 2> /dev/null || echo "") echo "$tag_json" | sed -rn 's/^.*"name":"([^"]*)".*$/\1/p' @@ -413,12 +421,12 @@ stages: function perform_snapshot() { # shellcheck disable=SC2086 - pom_version=$(mvn $MAVEN_CLI_OPTS $java_proxy_args org.apache.maven.plugins:maven-help-plugin:3.2.0:evaluate -Dexpression=project.version -q -DforceStdout | tail -n 1) + pom_version=$(mvn $MAVEN_CLI_OPTS $mvn_settings_opt $java_proxy_args org.apache.maven.plugins:maven-help-plugin:3.2.0:evaluate -Dexpression=project.version -q -DforceStdout | tail -n 1) case $pom_version in *-SNAPSHOT) log_info "Snapshot version for pom (\\e[33;1m${pom_version}\\e[0m): deploy" # shellcheck disable=SC2086 - mvn $MAVEN_CLI_OPTS $java_proxy_args $MAVEN_DEPLOY_ARGS + mvn $MAVEN_CLI_OPTS $mvn_settings_opt $java_proxy_args $MAVEN_DEPLOY_ARGS ;; *) log_info "Not snapshot version for pom (\\e[33;1m${pom_version}\\e[0m): skip" @@ -441,6 +449,7 @@ stages: - *mvn-scripts - install_ca_certs "${CUSTOM_CA_CERTS:-$DEFAULT_CA_CERTS}" - eval_java_proxy_args + - eval_mvn_settings_opt # Cache downloaded dependencies and plugins between builds. # To keep cache across branches add 'key: "$CI_JOB_NAME"' cache: @@ -452,7 +461,7 @@ mvn-build: extends: .mvn-base stage: build script: - - mvn ${TRACE+-X} $MAVEN_CLI_OPTS $java_proxy_args $MAVEN_BUILD_ARGS + - mvn ${TRACE+-X} $MAVEN_CLI_OPTS $mvn_settings_opt $java_proxy_args $MAVEN_BUILD_ARGS - output_coverage # code coverage RegEx coverage: '/^(\d+\.?\d*\%) covered$/' @@ -480,7 +489,7 @@ mvn-sonar: script: - sonar_autodetect_mr - if [[ "$SONAR_GITLAB_TOKEN" ]]; then sonar_extra_args="$SONAR_GITLAB_ARGS"; fi - - mvn ${TRACE+-Dsonar.verbose=true} $MAVEN_CLI_OPTS $java_proxy_args ${SONAR_AUTH_TOKEN+-Dsonar.login=$SONAR_AUTH_TOKEN} ${SONAR_LOGIN+-Dsonar.login=$SONAR_LOGIN} ${SONAR_PASSWORD+-Dsonar.password=$SONAR_PASSWORD} $SONAR_BASE_ARGS $sonar_extra_args $sonar_mr_args + - mvn ${TRACE+-Dsonar.verbose=true} $MAVEN_CLI_OPTS $mvn_settings_opt $java_proxy_args ${SONAR_AUTH_TOKEN+-Dsonar.login=$SONAR_AUTH_TOKEN} ${SONAR_LOGIN+-Dsonar.login=$SONAR_LOGIN} ${SONAR_PASSWORD+-Dsonar.password=$SONAR_PASSWORD} $SONAR_BASE_ARGS $sonar_extra_args $sonar_mr_args - if [[ "$SONAR_QUALITY_GATE_ENABLED" == "true" ]]; then sonar_quality_gate_check; fi rules: # exclude merge requests @@ -506,7 +515,7 @@ mvn-dependency-check: # force no dependency dependencies: [] script: - - mvn ${TRACE+-X} $MAVEN_CLI_OPTS $java_proxy_args $MAVEN_DEPENDENCY_CHECK_ARGS + - mvn ${TRACE+-X} $MAVEN_CLI_OPTS $mvn_settings_opt $java_proxy_args $MAVEN_DEPENDENCY_CHECK_ARGS rules: # exclude merge requests - if: $CI_MERGE_REQUEST_ID @@ -529,7 +538,7 @@ mvn-forbid-snapshot-dependencies: extends: .mvn-base stage: test script: - - mvn ${TRACE+-X} $MAVEN_CLI_OPTS $java_proxy_args org.apache.maven.plugins:maven-enforcer-plugin:3.0.0:enforce -Drules=requireReleaseDeps + - mvn ${TRACE+-X} $MAVEN_CLI_OPTS $mvn_settings_opt $java_proxy_args org.apache.maven.plugins:maven-enforcer-plugin:3.0.0:enforce -Drules=requireReleaseDeps rules: # exclude merge requests - if: $CI_MERGE_REQUEST_ID @@ -586,7 +595,7 @@ mvn-release: semrel_args="-DreleaseVersion=${SEMREL_INFO_NEXT_VERSION}" fi fi - - mvn ${TRACE+-X} $MAVEN_CLI_OPTS $java_proxy_args $scm_auth_args ${MAVEN_RELEASE_ARGS} ${semrel_args} -DscmCommentPrefix="$MAVEN_RELEASE_SCM_COMMENT_PREFIX" + - mvn ${TRACE+-X} $MAVEN_CLI_OPTS $mvn_settings_opt $java_proxy_args $scm_auth_args ${MAVEN_RELEASE_ARGS} ${semrel_args} -DscmCommentPrefix="$MAVEN_RELEASE_SCM_COMMENT_PREFIX" rules: # exclude merge requests - if: $CI_MERGE_REQUEST_ID