Что такое Predefined variables в GitLab CI/CD?

«Что такое Predefined variables в GitLab CI/CD?» — вопрос из категории CI/CD, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Predefined variables (предопределенные переменные) в GitLab CI/CD — это набор переменных окружения, которые GitLab Runner автоматически устанавливает для каждого задания (job) в пайплайне. Они содержат контекстную информацию о сборке, проекте и среде выполнения.

Практическое использование в DevOps: Эти переменные позволяют создавать гибкие и универсальные пайплайны, не хардкодя специфичные значения.

Примеры ключевых переменных:

  • CI_COMMIT_REF_NAME: Имя ветки или тега, для которой запущен пайплайн. Используется для условного выполнения шагов (например, деплой только из main).
  • CI_PROJECT_DIR: Полный путь к директории клонированного репозитория на раннере.
  • CI_JOB_TOKEN: Временный токен для аутентификации при взаимодействии с API GitLab (например, для скачивания артефактов).
  • CI_DEFAULT_BRANCH: Имя ветки по умолчанию (например, main).

Пример .gitlab-ci.yml с их использованием:

stages:
  - build
  - deploy

build:
  stage: build
  script:
    - echo "Building project $CI_PROJECT_NAME"
    - docker build -t myapp:$CI_COMMIT_SHA .
    # Сохраняем артефакт с динамическим именем
    - echo "Build successful for $CI_COMMIT_REF_NAME" > build-info-$CI_PIPELINE_ID.txt
  artifacts:
    paths:
      - build-info-*.txt

deploy_to_staging:
  stage: deploy
  script:
    - |
      if [ "$CI_COMMIT_REF_NAME" == "$CI_DEFAULT_BRANCH" ]; then
        echo "Deploying to staging from $CI_COMMIT_REF_NAME..."
        # Команда деплоя
      else
        echo "Skipping deploy for non-default branch."
      fi
  only:
    - branches