update gitlab ci

This commit is contained in:
kochetkov.s 2026-01-23 14:01:26 +03:00
parent 465325a679
commit c931431c11
2 changed files with 13 additions and 23 deletions

View File

@ -2,7 +2,6 @@ stages:
- generate - generate
- trigger - trigger
# Генерация динамического пайплайна на основе структуры live/
generate-pipeline: generate-pipeline:
stage: generate stage: generate
image: alpine:latest image: alpine:latest
@ -18,10 +17,7 @@ generate-pipeline:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"' - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- if: '$CI_COMMIT_BRANCH == "master" || $CI_COMMIT_BRANCH == "main"' - if: '$CI_COMMIT_BRANCH == "master" || $CI_COMMIT_BRANCH == "main"'
- if: '$CI_COMMIT_BRANCH =~ /^feature\/.*/' - if: '$CI_COMMIT_BRANCH =~ /^feature\/.*/'
tags:
- yc
# Запуск downstream пайплайна с сгенерированной конфигурацией
trigger-downstream: trigger-downstream:
stage: trigger stage: trigger
trigger: trigger:
@ -33,5 +29,3 @@ trigger-downstream:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"' - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- if: '$CI_COMMIT_BRANCH == "master" || $CI_COMMIT_BRANCH == "main"' - if: '$CI_COMMIT_BRANCH == "master" || $CI_COMMIT_BRANCH == "main"'
- if: '$CI_COMMIT_BRANCH =~ /^feature\/.*/' - if: '$CI_COMMIT_BRANCH =~ /^feature\/.*/'
tags:
- yc

View File

@ -1,20 +1,21 @@
#!/bin/bash #!/bin/bash
set -e set -e
# Скрипт для динамической генерации GitLab CI пайплайна
# Сканирует структуру live/ и создает джобы для каждого компонента
OUTPUT_FILE=".gitlab-ci.generated.yml" OUTPUT_FILE=".gitlab-ci.generated.yml"
# Функция для экранирования YAML
yaml_escape() { yaml_escape() {
echo "$1" | sed 's/"/\\"/g' echo "$1" | sed 's/"/\\"/g'
} }
# Начало файла
cat > "$OUTPUT_FILE" << 'EOF' cat > "$OUTPUT_FILE" << 'EOF'
# Автоматически сгенерированный файл GitLab CI
# НЕ РЕДАКТИРУЙТЕ ВРУЧНУЮ! Этот файл генерируется скриптом scripts/generate-pipeline.sh workflow:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- if: '$CI_COMMIT_BRANCH == "master" || $CI_COMMIT_BRANCH == "main"'
- if: '$CI_COMMIT_BRANCH =~ /^feature\/.*/'
- if: '$CI_PIPELINE_SOURCE == "pipeline"'
- when: always
stages: stages:
- validate - validate
@ -23,26 +24,20 @@ stages:
EOF EOF
# Поиск всех terragrunt.hcl файлов в live/
find live -name "terragrunt.hcl" -not -path "*/.terragrunt-cache/*" | sort | while read -r config_file; do find live -name "terragrunt.hcl" -not -path "*/.terragrunt-cache/*" | sort | while read -r config_file; do
# Извлечение пути компонента
component_dir=$(dirname "$config_file") component_dir=$(dirname "$config_file")
relative_path=$(echo "$component_dir" | sed 's|^live/||') relative_path=$(echo "$component_dir" | sed 's|^live/||')
# Парсинг окружения и компонента из пути # live/{env}/{component}/terragrunt.hcl
# Формат: live/{env}/{component}/terragrunt.hcl
env=$(echo "$relative_path" | cut -d'/' -f1) env=$(echo "$relative_path" | cut -d'/' -f1)
component=$(echo "$relative_path" | cut -d'/' -f2) component=$(echo "$relative_path" | cut -d'/' -f2)
# Пропускаем если это не компонент (например, env.hcl)
if [ -z "$component" ] || [ "$component" = "$env" ]; then if [ -z "$component" ] || [ "$component" = "$env" ]; then
continue continue
fi fi
# Формирование имени джобы
job_prefix="${env}-${component}" job_prefix="${env}-${component}"
# Определение переменных окружения для Yandex Cloud
case "$env" in case "$env" in
stage) stage)
folder_var="YC_STAGE_FOLDER_ID" folder_var="YC_STAGE_FOLDER_ID"
@ -58,7 +53,6 @@ find live -name "terragrunt.hcl" -not -path "*/.terragrunt-cache/*" | sort | whi
;; ;;
esac esac
# Джоба validate
cat >> "$OUTPUT_FILE" << EOF cat >> "$OUTPUT_FILE" << EOF
validate-${job_prefix}: validate-${job_prefix}:
stage: validate stage: validate
@ -87,13 +81,13 @@ validate-${job_prefix}:
rules: rules:
- if: '\$CI_PIPELINE_SOURCE == "merge_request_event"' - if: '\$CI_PIPELINE_SOURCE == "merge_request_event"'
- if: '\$CI_COMMIT_BRANCH == "master" || \$CI_COMMIT_BRANCH == "main"' - if: '\$CI_COMMIT_BRANCH == "master" || \$CI_COMMIT_BRANCH == "main"'
- if: '\$CI_PIPELINE_SOURCE == "pipeline"'
tags: tags:
- yc - yc
interruptible: true interruptible: true
EOF EOF
# Джоба plan
cat >> "$OUTPUT_FILE" << EOF cat >> "$OUTPUT_FILE" << EOF
plan-${job_prefix}: plan-${job_prefix}:
stage: plan stage: plan
@ -121,6 +115,7 @@ plan-${job_prefix}:
rules: rules:
- if: '\$CI_COMMIT_BRANCH == "master" || \$CI_COMMIT_BRANCH == "main"' - if: '\$CI_COMMIT_BRANCH == "master" || \$CI_COMMIT_BRANCH == "main"'
- if: '\$CI_PIPELINE_SOURCE == "merge_request_event"' - if: '\$CI_PIPELINE_SOURCE == "merge_request_event"'
- if: '\$CI_PIPELINE_SOURCE == "pipeline"'
tags: tags:
- yc - yc
interruptible: true interruptible: true
@ -133,7 +128,6 @@ plan-${job_prefix}:
EOF EOF
# Джоба apply (manual для prod, автоматическая для остальных)
if [ "$env" = "prod" ]; then if [ "$env" = "prod" ]; then
when_clause="manual" when_clause="manual"
else else
@ -167,6 +161,8 @@ apply-${job_prefix}:
rules: rules:
- if: '\$CI_COMMIT_BRANCH == "master" || \$CI_COMMIT_BRANCH == "main"' - if: '\$CI_COMMIT_BRANCH == "master" || \$CI_COMMIT_BRANCH == "main"'
when: ${when_clause} when: ${when_clause}
- if: '\$CI_PIPELINE_SOURCE == "pipeline"'
when: ${when_clause}
tags: tags:
- yc - yc
interruptible: true interruptible: true