Ответ
Предопределенные (predefined) переменные среды — это переменные, которые CI/CD система (GitLab CI, GitHub Actions, Jenkins) автоматически устанавливает перед запуском каждого задания (job). Они предоставляют контекст о текущем запуске: информацию о репозитории, коммите, пайплайне и среде выполнения.
Зачем они нужны:
- Избегание хардкода: Не нужно вручную прописывать имена веток, теги коммитов или пути.
- Универсальность скриптов: Один и тот же скрипт может работать в разных контекстах (ветках, тегах).
- Принятие решений в пайплайне: Логика пайплайна может ветвиться в зависимости от переменных (например,
if: $CI_COMMIT_BRANCH == 'main').
Примеры ключевых переменных в GitLab CI:
CI_COMMIT_SHA: Хэш коммита, для которого запущен пайплайн.CI_COMMIT_REF_NAME: Имя ветки или тега.CI_PROJECT_DIR: Полный путь к директории клонированного репозитория на раннере.CI_JOB_NAME: Название текущего задания.CI_RUNNER_TAGS: Теги раннера, выполняющего задание (полезно для выбора специфичного раннера).CI_DEFAULT_BRANCH: Имя ветки по умолчанию (обычноmainилиmaster).
Практическое использование:
# .gitlab-ci.yml
build:
script:
# Используем SHA коммита как уникальный тег образа
- docker build -t my-registry.com/my-app:$CI_COMMIT_SHA .
- docker push my-registry.com/my-app:$CI_COMMIT_SHA
deploy:staging:
script:
- echo "Deploying commit $CI_COMMIT_SHA from branch $CI_COMMIT_REF_NAME"
# Развертываем только если это не main ветка
- if [ "$CI_COMMIT_REF_NAME" != "$CI_DEFAULT_BRANCH" ]; then helm upgrade --install my-app-staging ./chart --set image.tag=$CI_COMMIT_SHA; fi
rules:
- if: $CI_COMMIT_BRANCH
Полный список всегда следует уточнять в официальной документации конкретной CI-системы.