terraform-contour-mirror/.gitlab-ci.yml
2026-09-24 12:01:43 +03:00

112 lines
3.4 KiB
YAML

include:
- project: 'generic/common-ci'
file: '/common-build.yaml'
stages:
- generate
- trigger
- deploy
generate-pipeline:
stage: generate
image: alpine:latest
before_script:
- apk add --no-cache bash findutils
script:
- echo "=== DEBUG INFO ==="
- echo "CI_PIPELINE_SOURCE=$CI_PIPELINE_SOURCE"
- echo "CI_COMMIT_BRANCH=$CI_COMMIT_BRANCH"
- echo "CI_MERGE_REQUEST_SOURCE_BRANCH_NAME=$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME"
- pwd && ls -la
- echo "=== Finding terragrunt files ==="
- find live -name "terragrunt.hcl" -not -path "*/.terragrunt-cache/*" | head -20 || echo "No files found"
- echo "=== Generating pipeline ==="
- chmod +x ./scripts/generate-pipeline.sh
- ./scripts/generate-pipeline.sh
- echo "=== Generated pipeline content ==="
- cat .gitlab-ci.generated.yml
artifacts:
paths:
- .gitlab-ci.generated.yml
expire_in: 1 hour
rules:
- if: '$CI_PIPELINE_SOURCE == "pipeline"'
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- if: '$CI_COMMIT_BRANCH == "stage"'
- if: '$CI_COMMIT_BRANCH == "master"'
- if: '$CI_COMMIT_BRANCH =~ /^feature\/.*/'
# Prod environment
trigger-downstream-prod:
stage: trigger
needs:
- generate-pipeline
trigger:
include:
- artifact: .gitlab-ci.generated.yml
job: generate-pipeline
strategy: depend
forward:
pipeline_variables: true
yaml_variables: true
variables:
TERRAFORM_IMAGE_NAME: cr.yandex/crp3ccidau046kdj8g9q/terraform/terragrunt:v9.11
YC_SERVICE_ACCOUNT_KEY_FILE: ${YC_PROD_SERVICE_ACCOUNT_KEY_FILE}
YC_CLOUD_ID: ${YC_CLOUD_ID}
YC_STAGE_FOLDER_ID: ${YC_STAGE_FOLDER_ID}
YC_PROD_FOLDER_ID: ${YC_PROD_FOLDER_ID}
YC_PREPROD_FOLDER_ID: ${YC_PREPROD_FOLDER_ID}
S3_ACCESS_KEY: ${S3_PROD_ACCESS_KEY}
S3_SECRET_KEY: ${S3_PROD_SECRET_KEY}
S3_STATE_BUCKET: ${S3_PROD_STATE_BUCKET}
AWS_ACCESS_KEY_ID: ${S3_PROD_ACCESS_KEY}
AWS_SECRET_ACCESS_KEY: ${S3_PROD_SECRET_KEY}
TARGET_ENV: "prod"
rules:
- if: '$CI_PIPELINE_SOURCE == "pipeline"'
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- if: '$CI_COMMIT_BRANCH == "master"'
- if: '$CI_COMMIT_BRANCH =~ /^feature\/.*/'
mirror-contour:
stage: deploy
image: alpine:3.21
variables:
GIT_DEPTH: "0"
before_script:
- apk add --no-cache git ca-certificates
script:
- git push --force "$CONTOUR_MIRROR_PUSH_URL" "$CI_COMMIT_SHA:refs/heads/contour"
rules:
- if: '$CI_COMMIT_BRANCH == "contour" && $CI_PIPELINE_SOURCE == "push"'
build_offline_mirror:
extends: .base_docker_prod
stage: deploy
variables:
RELEASE_NAME: terraform-offline
DOCKERFILE_PATH: Dockerfile.offline
IMAGE_NAME: ${CR}/${RELEASE_NAME}:${CI_COMMIT_TAG}
rules:
- if: $CI_COMMIT_TAG =~ /^v?(?:\d+\.){2}\d+$/
allow_failure: false
script:
- printf '%s' "$CI_JOB_TOKEN" > /tmp/gl_token
- mkdir -p /tmp/emptyctx
- docker build -f ${DOCKERFILE_PATH} /tmp/emptyctx
--secret id=gl_token,src=/tmp/gl_token
--build-arg GIT_TAG="${CI_COMMIT_TAG}"
--build-arg EXPECT_COMMIT="${CI_COMMIT_SHA}"
--build-arg BUILT_AT="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
-t ${IMAGE_NAME}
-t ${CR}/${RELEASE_NAME}:latest
- docker run --rm -e DRY_RUN=true ${IMAGE_NAME}
- docker push ${IMAGE_NAME}
- docker push ${CR}/${RELEASE_NAME}:latest
timeout: 30m