diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index eea991187fcb13872555ec7e4d6af36a7c6d326a..ad0165cdb8f08e820d6e9c30f30d2994ac2e1e5a 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,46 +1,16 @@
-# stages:
-#   - java_build
-#   - docker_build
-
-.default_rules: &default_rules
+.default:
+  variables:
+    DEFAULT_TAG: "1.2.0-SNAPSHOT"
+  before_script:
+    - |
+      if [ "$CI_COMMIT_REF_NAME" = "main" ] && [ -n "$CI_COMMIT_TAG" ]; then
+        export APP_VERSION=$CI_COMMIT_TAG
+      elif [ "$CI_COMMIT_REF_NAME" = "develop" ]; then
+        export APP_VERSION="develop"
+      else
+        export APP_VERSION=$DEFAULT_TAG
+      fi
   rules:
     - if: $CI_COMMIT_REF_NAME == "main"
     - if: $CI_COMMIT_REF_NAME == "develop"
     - if: $CI_COMMIT_REF_NAME == "12-create-a-pipeline-to-build-and-publish-the-docker-image-in-gitlab-registry"
-
-variables:
-  DEFAULT_TAG: "1.2.0-SNAPSHOT"
-
-before_script:
-  - |
-    if [ "$CI_COMMIT_REF_NAME" = "main" ] && [ -n "$CI_COMMIT_TAG" ]; then
-      export APP_VERSION=$CI_COMMIT_TAG
-    elif [ "$CI_COMMIT_REF_NAME" = "develop" ]; then
-      export APP_VERSION="develop"
-    else
-      export APP_VERSION=$DEFAULT_TAG
-    fi
-
-java_build:
-  # stage: java_build
-  image: maven:3.9.5-ibm-semeru-17-focal
-  script:
-    - mvn deploy -s ci_settings.xml -DskipTests -Dversion=$APP_VERSION
-  artifacts:
-    paths:
-      - target/
-  <<: *default_rules
-
-# .docker_build:
-#   stage: docker_build
-#   image:
-#     name: gcr.io/kaniko-project/executor:debug
-#     entrypoint: [""]
-#   script:
-#     - /kaniko/executor --context "${CI_PROJECT_DIR}" --dockerfile "${CI_PROJECT_DIR}/Dockerfile" --destination "${CI_REGISTRY_IMAGE}:$APP_VERSION"
-#     - |
-#       if [ "$CI_COMMIT_REF_NAME" = "main" ]; then
-#         echo "Pushing Docker image with tag 'latest'"
-#         /kaniko/executor --context "${CI_PROJECT_DIR}" --dockerfile "${CI_PROJECT_DIR}/Dockerfile" --destination "${CI_REGISTRY_IMAGE}:latest"
-#       fi
-#   <<: *default_rules
diff --git a/ci-templates/build.yml b/ci-templates/build.yml
new file mode 100644
index 0000000000000000000000000000000000000000..3873ce92fd207016112dbacf4d53be45a5694236
--- /dev/null
+++ b/ci-templates/build.yml
@@ -0,0 +1,21 @@
+.maven_build:
+  extends: .default
+  image: maven:3.9.5-ibm-semeru-17-focal
+  script:
+    - mvn deploy -s ci_settings.xml -DskipTests -Dversion=$APP_VERSION
+  artifacts:
+    paths:
+      - target/
+
+.docker_build:
+  extends: .default
+  image:
+    name: gcr.io/kaniko-project/executor:debug
+    entrypoint: [""]
+  script:
+    - /kaniko/executor --context "${CI_PROJECT_DIR}" --dockerfile "${CI_PROJECT_DIR}/Dockerfile" --destination "${CI_REGISTRY_IMAGE}:$APP_VERSION"
+    - |
+      if [ "$CI_COMMIT_REF_NAME" = "main" ]; then
+        echo "Pushing Docker image with tag 'latest'"
+        /kaniko/executor --context "${CI_PROJECT_DIR}" --dockerfile "${CI_PROJECT_DIR}/Dockerfile" --destination "${CI_REGISTRY_IMAGE}:latest"
+      fi