Где и как выполняются команды, описанные в .gitlab-ci.yml?

Ответ

Команды, определённые в файле .gitlab-ci.yml, выполняются на GitLab Runner'ах.

GitLab Runner — это отдельное приложение (агент), которое запускается на сервере, виртуальной машине, в Docker-контейнере или в кластере Kubernetes. Его задача — получать задания (jobs) от GitLab CI/CD, выполнять их в чистом окружении и отправлять результаты обратно в GitLab.

Процесс работы:

  1. Разработчик отправляет код в репозиторий GitLab.
  2. GitLab обнаруживает файл .gitlab-ci.yml и создает пайплайн (pipeline) с заданиями (jobs).
  3. GitLab передает эти задания доступным Runner'ам, которые соответствуют указанным тегам (например, docker, linux, macos).
  4. Runner выполняет шаги, описанные в секции script для каждого задания.

Пример .gitlab-ci.yml:

test_job:
  stage: test
  # Указываем, что задание должно выполняться на Runner'е с тегом 'docker'
  tags:
    - docker
  script:
    - echo "Запускаем тесты..."
    - go test ./...

Типы Runner'ов:

  • Shared Runners: Общие для всех проектов в инстансе GitLab (управляются администратором GitLab).
  • Group Runners: Доступны для всех проектов в определенной группе.
  • Specific Runners: Привязаны к конкретным проектам. Дают максимальный контроль над окружением.