Параметризация и использование шаблона CI/CD
Передача параметров в пайплайн
Все параметры, которые влияют на сборку и деплой, задаются в .gitlab-ci.yml в блоках workflow.rules.
Для каждой ветки/тега указываются свои значения переменных.
Пример для stage:
workflow:
rules:
- if: '$CI_COMMIT_BRANCH == "stage"'
variables:
STAND: stage
NAMESPACE: bi-stage
RELEASE_NAME: ${SERVICE_NAME}
CHART_NAME: ${SERVICE_NAME}
CHART_VERSION: "0.0.1-stage"
K8S_HUSTLER_BRANCH: universal-chart-stage
HELM_SET_ARGS: >-
--set universal-chart.services.main.image.name.stage=${IMAGE_NAME}
--set universal-chart.global.env=stage
--set universal-chart.services.main.commitSha=${CI_COMMIT_SHA}
--set universal-chart.services.main.gitlabUri=${CI_PROJECT_URL}
--set universal-chart.services.main.gitlabJobUrl=${CI_JOB_URL}
--set universal-chart.services.main.owner=${CI_PROJECT_NAMESPACE}
Когда GitLab запускает пайплайн для ветки stage, он автоматически подставляет эти переменные.
BUILD_ARGS — аргументы сборки Docker
В сборку образа аргументы попадают через BUILD_ARGS:
docker build -f ${DOCKERFILE_PATH} ${BUILD_ARGS} -t ${IMAGE_NAME} .
Пример:
variables:
BUILD_ARGS: "--build-arg CI_COMMIT_SHORT_SHA=${CI_COMMIT_SHORT_SHA}"
Для фронтенда часто добавляют:
BUILD_ARGS: "--build-arg ENDPOINT=stage --build-arg NPM_NEXUS_TOKEN=${NPM_NEXUS_TOKEN}"
Формирование IMAGE_NAME
Имя образа формируется автоматически:
IMAGE_NAME = ${CR}/${RELEASE_NAME}:${STAND}_${CI_COMMIT_SHORT_SHA}
Пример: cr.yandex/bi-backend:stage_abc123def
HELM_SET_ARGS — параметры деплоя
HELM_SET_ARGS содержит --set аргументы для helm:
HELM_SET_ARGS: >-
--set universal-chart.services.main.image.name.stage=${IMAGE_NAME}
--set universal-chart.global.env=stage
--set universal-chart.services.main.commitSha=${CI_COMMIT_SHA}
--set universal-chart.services.main.gitlabUri=${CI_PROJECT_URL}
--set universal-chart.services.main.gitlabJobUrl=${CI_JOB_URL}
--set universal-chart.services.main.owner=${CI_PROJECT_NAMESPACE}
Важно: путь к образу теперь universal-chart.services.<service-name>.image.name.<env>.
Раскатка с ветки в нужный namespace
Всё работает автоматически по имени ветки или тегу:
| Ветка/тег | Окружение | Namespace |
|---|---|---|
stage |
stage | <servicename> |
master |
preprod | <servicename> |
vX.Y.Z |
production | <servicename> |
GitLab подставит правильные переменные из workflow.rules:
STAND— определяет окружениеNAMESPACE— куда деплоимRELEASE_NAME— имя релиза HelmCHART_VERSION— версия chartHELM_SET_ARGS— аргументы для helm
Основные переменные
| Переменная | Описание |
|---|---|
CR |
Container registry (cr.yandex/crp3ccidau046kdj8g9q) |
HELM_REGISTRY |
OCI registry для чартов |
SAREX_REGISTRY_KEY |
JSON-ключ для docker login (группа) |
HELM_REGISTRY_KEY |
JSON-ключ для helm registry (группа) |
SERVICE_NAME |
Имя сервиса |
RELEASE_NAME |
Имя Helm-релиза |
STAND |
stage / preprod / production |
NAMESPACE |
Целевой namespace |
CHART_VERSION |
Версия чарта |
CHART_NAME |
Имя чарта |
K8S_HUSTLER_BRANCH |
Ветка k8s-hustler |
DOCKERFILE_PATH |
Путь к Dockerfile |
BUILD_ARGS |
Аргументы для docker build |
HELM_SET_ARGS |
Аргументы для helm upgrade |
CI_TRIGGER_SOURCE |
Источник триггера (app / infra) |
Feature flags
| Переменная | По умолчанию | Описание |
|---|---|---|
ENABLE_BUILD_IMAGE |
"true" |
Сборка Docker-образа |
ENABLE_BUILD_CHART |
"true" |
Сборка Helm-чарта |
ENABLE_DEPLOY |
"true" |
Включение деплоя |
ENABLE_STATE_UPDATE |
"false" |
Обновление values в k8s-hustler |