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