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

View File

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