From 2253e9a3a894cdf2af40b49e2d49df90b9c4642d Mon Sep 17 00:00:00 2001 From: Thatsaphorn Atchariyaphap Date: Fri, 2 May 2025 10:41:38 +0200 Subject: [PATCH] Refactor GitLab CI/CD pipelines --- .gitlab-ci.yml | 6 ++++++ backend/.gitlab-ci.yml | 42 ++++++++++++++++++----------------------- ci-templates.yml | 16 ++++++++++++++++ frontend/.gitlab-ci.yml | 29 +++++++--------------------- 4 files changed, 47 insertions(+), 46 deletions(-) create mode 100644 ci-templates.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 92784b5..38936f5 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,6 +1,7 @@ image: docker:20.10@sha256:2967f0819c84dd589ed0a023b9d25dcfe7a3c123d5bf784ffbb77edf55335f0c include: + - local: 'ci-templates.yml' - local: 'backend/.gitlab-ci.yml' - local: 'frontend/.gitlab-ci.yml' @@ -11,6 +12,11 @@ stages: - deploy - sync +variables: + CI_REGISTRY_IMAGE: registry.gitlab.com/$CI_PROJECT_PATH + RAW_TAG: $CI_COMMIT_REF_NAME + TAG: "${RAW_TAG//\//_}" # replace "/" with "_" + sync_branches: stage: sync image: node:22@sha256:f6b9c31ace05502dd98ef777aaa20464362435dcc5e312b0e213121dcf7d8b95 diff --git a/backend/.gitlab-ci.yml b/backend/.gitlab-ci.yml index f4923c4..a7e556c 100644 --- a/backend/.gitlab-ci.yml +++ b/backend/.gitlab-ci.yml @@ -3,7 +3,6 @@ stages: variables: REGISTRY: registry.gitlab.com/$CI_PROJECT_PATH - TAG: $CI_COMMIT_REF_SLUG backend_build_job: stage: backend_build @@ -21,32 +20,27 @@ backend_build_job: build_shared_base_image: stage: dockerize - before_script: - - echo "$CI_REGISTRY_PASSWORD" | docker login "$CI_REGISTRY" -u "$CI_REGISTRY_USER" --password-stdin - script: - - docker build -f backend/Dockerfile.base -t $REGISTRY/shared-base:$TAG . - - docker push $REGISTRY/shared-base:$TAG - needs: - - backend_build_job + extends: .docker_build_template + variables: + DOCKER_CONTEXT: backend + DOCKERFILE: Dockerfile.base + DOCKER_IMAGE: "$DOCKER_IMAGE/shared-base" + DOCKER_BUILD_ARGS: "" build_gateway_image: stage: dockerize - before_script: - - echo "$CI_REGISTRY_PASSWORD" | docker login "$CI_REGISTRY" -u "$CI_REGISTRY_USER" --password-stdin - script: - - docker build --build-arg JAR_FILE=backend/gateway/target/gateway-*.jar -f backend/Dockerfile.service -t $REGISTRY/gateway:$TAG . - - docker push $REGISTRY/gateway:$TAG - needs: - - backend_build_job - - build_shared_base_image + extends: .docker_build_template + variables: + DOCKER_CONTEXT: backend + DOCKERFILE: Dockerfile.service + DOCKER_IMAGE: "$DOCKER_IMAGE/gateway" + DOCKER_BUILD_ARGS: "--build-arg JAR_FILE=gateway/target/gateway-*.jar" build_discovery_image: stage: dockerize - before_script: - - echo "$CI_REGISTRY_PASSWORD" | docker login "$CI_REGISTRY" -u "$CI_REGISTRY_USER" --password-stdin - script: - - docker build --build-arg JAR_FILE=backend/discoveryServer/target/discoveryServer-*.jar -f backend/Dockerfile.service -t $REGISTRY/discovery-server:$TAG . - - docker push $REGISTRY/discovery-server:$TAG - needs: - - backend_build_job - - build_shared_base_image \ No newline at end of file + extends: .docker_build_template + variables: + DOCKER_CONTEXT: backend + DOCKERFILE: Dockerfile.service + DOCKER_IMAGE: "$DOCKER_IMAGE/discovery-server" + DOCKER_BUILD_ARGS: "--build-arg JAR_FILE=discoveryServer/target/discoveryServer-*.jar" \ No newline at end of file diff --git a/ci-templates.yml b/ci-templates.yml new file mode 100644 index 0000000..27a5e40 --- /dev/null +++ b/ci-templates.yml @@ -0,0 +1,16 @@ +.docker_build_template: + image: docker:20.10@sha256:2967f0819c84dd589ed0a023b9d25dcfe7a3c123d5bf784ffbb77edf55335f0c + before_script: + - echo "$CI_REGISTRY_PASSWORD" | docker login "$CI_REGISTRY" -u "$CI_REGISTRY_USER" --password-stdin + script: + - cd $DOCKER_CONTEXT + - | + echo "Building Docker image for $DOCKER_IMAGE with tag $TAG" + docker build $DOCKER_BUILD_ARGS -t $DOCKER_IMAGE:$TAG -f $DOCKERFILE . + - | + if [[ "$RAW_TAG" == "dev" || "$RAW_TAG" == "production" ]]; then + echo "Pushing Docker image $DOCKER_IMAGE:$TAG" + docker push $DOCKER_IMAGE:$TAG + else + echo "Skipping Docker push for non-dev or production branch: $RAW_TAG" + fi \ No newline at end of file diff --git a/frontend/.gitlab-ci.yml b/frontend/.gitlab-ci.yml index f474a9e..b1f966b 100644 --- a/frontend/.gitlab-ci.yml +++ b/frontend/.gitlab-ci.yml @@ -12,22 +12,7 @@ variables: NEXT_PUBLIC_ENV: "production" OUTPUT_DIR: ".next" PROJECT_NAME: $CI_PROJECT_NAME - DOCKER_IMAGE: "registry.boomlab.party/rheinsw/$CI_PROJECT_NAME" - -# Reusable block for docker build & push -.dockerize_script: &dockerize_script - - | - RAW_TAG="$CI_COMMIT_REF_NAME" - TAG="${RAW_TAG//\//_}" # replace "/" with "_" - echo "Sanitized tag: $TAG" - docker build -t $DOCKER_IMAGE:$TAG -f Dockerfile . - - if [[ "$RAW_TAG" == "dev" || "$RAW_TAG" == "production" ]]; then - echo "Pushing Docker image $DOCKER_IMAGE:$TAG" - docker push $DOCKER_IMAGE:$TAG - else - echo "Skipping Docker push for non-dev or production branch: $RAW_TAG" - fi + DOCKER_IMAGE: $CI_REGISTRY_IMAGE frontend_build_job: stage: frontend_build @@ -40,11 +25,11 @@ frontend_build_job: dockerize_frontend: stage: dockerize - image: docker:20.10@sha256:2967f0819c84dd589ed0a023b9d25dcfe7a3c123d5bf784ffbb77edf55335f0c - before_script: - - echo "$CI_REGISTRY_PASSWORD" | docker login "$CI_REGISTRY" -u "$CI_REGISTRY_USER" --password-stdin - script: - - cd frontend - - *dockerize_script + extends: .docker_build_template + variables: + DOCKER_CONTEXT: frontend + DOCKERFILE: Dockerfile + DOCKER_IMAGE: $DOCKER_IMAGE + DOCKER_BUILD_ARGS: "" needs: - job: frontend_build_job