ci: align mr development production triggers

This commit is contained in:
M1 AIR
2026-03-05 00:27:05 +07:00
parent 562d8a90c8
commit 70db3cfd34
+32 -16
View File
@@ -14,9 +14,10 @@ variables:
workflow: workflow:
rules: rules:
# run untuk push & MR ke prod # run untuk branch utama & MR
- if: '$CI_PIPELINE_SOURCE == "push"' - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "development"'
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"' - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "production"'
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "production"'
- when: never - when: never
# ========================= # =========================
@@ -40,12 +41,9 @@ workflow:
echo "$PASS" | docker login --username AWS --password-stdin "$ECR_REGISTRY" echo "$PASS" | docker login --username AWS --password-stdin "$ECR_REGISTRY"
# ========================= # =========================
# PROD # MR
# 1) MR ke target production: build (optional push)
# 2) Push ke production: build + push + update gitops
# ========================= # =========================
build_mr:
build_prod_mr:
stage: build stage: build
image: public.ecr.aws/docker/library/docker:27 image: public.ecr.aws/docker/library/docker:27
tags: [self-hosted-dev] tags: [self-hosted-dev]
@@ -53,8 +51,6 @@ build_prod_mr:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "production"' - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "production"'
variables: variables:
IMAGE_TAG: "prod-mr-${CI_COMMIT_SHORT_SHA}" IMAGE_TAG: "prod-mr-${CI_COMMIT_SHORT_SHA}"
# kalau mau push juga saat MR, set di project/CI variable: PUSH_IMAGE=true
PUSH_IMAGE: "${PUSH_IMAGE:-false}"
before_script: before_script:
- set -eu - set -eu
- docker version - docker version
@@ -64,14 +60,34 @@ build_prod_mr:
set -eu set -eu
echo "Build (MR) : $ECR_REPOSITORY:$IMAGE_TAG" echo "Build (MR) : $ECR_REPOSITORY:$IMAGE_TAG"
docker build -f Dockerfile -t "$ECR_REPOSITORY:$IMAGE_TAG" . docker build -f Dockerfile -t "$ECR_REPOSITORY:$IMAGE_TAG" .
echo "Pushing image for MR..."
docker push "$ECR_REPOSITORY:$IMAGE_TAG"
if [ "$PUSH_IMAGE" = "true" ]; then # =========================
echo "Pushing image for MR..." # DEVELOPMENT (push branch development)
docker push "$ECR_REPOSITORY:$IMAGE_TAG" # =========================
else build_push_dev:
echo "Skip push (MR)." stage: build
fi image: public.ecr.aws/docker/library/docker:27
tags: [self-hosted-dev]
rules:
- if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "development"'
variables:
IMAGE_TAG: "dev-${CI_COMMIT_SHORT_SHA}"
before_script:
- set -eu
- docker version
- docker info
- *ecr_login
script: |
set -eu
echo "Build & push (dev): $ECR_REPOSITORY:$IMAGE_TAG"
docker build -f Dockerfile -t "$ECR_REPOSITORY:$IMAGE_TAG" .
docker push "$ECR_REPOSITORY:$IMAGE_TAG"
# =========================
# PRODUCTION (push branch production)
# =========================
build_push_prod: build_push_prod:
stage: build stage: build
image: public.ecr.aws/docker/library/docker:27 image: public.ecr.aws/docker/library/docker:27