Как вы получаете исходный код из системы контроля версий (например, Git) в CI/CD?

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

Ответ

В CI/CD пайплайне получение кода — это первый шаг. Обычно его автоматически выполняет runner, но важно управлять параметрами для оптимизации.

Как это настраиваю я:

  1. В GitLab CI используется автоматический git clone. Для ускорения часто применяю shallow clone:

    variables:
      GIT_DEPTH: 1  # Клонирует только последний коммит
  2. В GitHub Actions стандартный шаг actions/checkout@v4:

    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 1 # Аналог shallow clone
          ref: ${{ github.event.pull_request.head.sha }} # Для PR — чекаутим код из ветки PR
  3. Для приватных репозиториев или сабмодулей необходимо корректно настроить аутентификацию. В GitLab CI используются предустановленные CI_JOB_TOKEN. В GitHub Actions нужно создать Deploy Key или использовать токен (GITHUB_TOKEN или PAT), переданный в secrets.

  4. Кэширование репозитория: На self-hosted runner'ах можно настроить кэширование рабочей директории (хотя это требует осторожности), чтобы избежать полного клонирования при каждом запуске, если изменения небольшие.

Основная цель — получить минимально необходимый для сборки код как можно быстрее, поэтому depth: 1 — стандартная практика для CI.