Часто задаваемые вопросы (FAQ) по CI/CD

Info

В этом разделе рассматриваем популярные вопросы о CI/CD на GitVerse.

Как включить/выключить CI/CD?

Для включения/выключения CI/CD перейдите в профиль вашего репозитория и выполните следующие шаги:

  1. Выберите вкладку Настройки.

  2. Выберите Репозиторий.

  3. Включите тумблер CI/CD.

  4. Выберите приоритет для пути для конфигурационных файлов workflow.

Info

Если у вас только одна директория с конфигурационными файлами workflow, то раннеры будут выполнять их независимо от выбранной здесь опции.

  1. Нажмите Обновить.

После включения CI/CD GitVerse начнет автоматически сканировать каталог .gitverse/workflows/ вашего репозитория и запускать workflow при срабатывании триггеров.

Где посмотреть все настройки для раннера?

Все доступные настройки можно посмотреть, запустив раннер с флагом-параметром generate-config:

./act_runner generate-config

Эта команда выведет полный шаблон конфигурационного файла (config.yaml) с комментариями к каждой опции. Используйте его как основу для настройки пользовательского раннера.

Можно ли управлять параллелизмом задач, обрабатываемых раннером?

Да, runner может выполнять несколько задач одновременно. Параметр capacity в конфигурации определяет максимальное количество параллельных задач.

  1. Запустите runner с флагом-параметром generate-config:
./act_runner generate-config > config.yaml
  1. В секции runner созданного конфигурационного файла в параметре capacity укажите максимальное количество job, которые раннер может выполнять параллельно:
runner:
  capacity: 4
  1. Запустите раннерр с созданным config.yaml.

    Если используете приложение:

./act_runner daemon --config config.yaml

Если используете docker-контейнер:

docker run \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v $PWD/config.yaml:/config.yaml \
  -e CONFIG_FILE=/config.yaml \
  -e RUNNER_REGISTRATION_TOKEN=<registration_token> \
  -e RUNNER_NAME=<runner_name> \
  --name my_runner \
  -d gitverse.ru/gitverse/act-runner:latest

В этом примере <registration_token> — это токен регистрации раннера, который можно получить в настройках репозитория, а <runner_name> — имя раннер для идентификации.

Можно ли использовать свой образ Docker для запуска задач?

Да, вы можете запускать задачи на своем Docker-образе с собственной средой, инструментами и зависимостями. Для этого в конфигурации job укажите параметр container.

Пример workflow с кастомным образом Docker:

jobs:
  lint:
    runs-on: self-hosted
    container:
      image: my-registry.example.com/project/my-custom-image:latest

В этом примере job выполняется в контейнере на основе образа my-custom-image:latest, загруженного из частного реестра my-registry.example.com. Если реестр требует аутентификации, используйте секреты DOCKER_USERNAME и DOCKER_PASSWORD.

Как собрать Docker-образ на облачном раннере?

Облачный раннер в GitVerse не имеет доступа к Docker Daemon, поэтому стандартная команда docker build не работает. Для сборки Docker-образов на облачном раннере используйте kaniko.

Kaniko — это инструмент, который собирает Docker-образы без Docker Daemon. Kaniko читает Dockerfile и собирает образ, используя только файловую систему контейнера. Это делает его идеальным для CI/CD pipeline (конвейера) на облачном раннере.

Подробнее о настройке kaniko читайте в разделе Облачный раннер: сборка Docker-образов.

Можно ли иметь раннеры с одинаковыми метками?

Да, можно. Вы можете зарегистрировать несколько раннер с одинаковыми label. Задачи будут распределяться между доступными раннерами с соответствующей меткой по мере их появления в очереди.

Это полезно для масштабирования CI/CD: когда количество задач превышает возможности одного раннера, дополнительные раннеры с той же меткой берут задачи в работу автоматически. Убедитесь, что у всех раннеров одинаковые метки, если вы хотите, чтобы они обрабатывали одни и те же job.

Где получить токен для доступа к хранилищу GitVerse?

Токен (personal access token, личный токен доступа) можно сгенерировать в настройках профиля пользователя на вкладке «Управление токенами».

После генерации токена сохраните его — он отображается только один раз. Используйте токен как секрет в workflow для аутентификации при доступе к частным репозиториям или при публикации пакетов.

Какой синтаксис у workflow? Совместим ли он с GitHub Actions?

Синтаксис YAML-файлов CI/CD в GitVerse в целом совместим с GitHub Actions. Вы можете использовать существующие workflow (включая большинство действий из Marketplace) практически без изменений.

Основные отличия от GitHub Actions:

  • каталог workflow в GitVerse: .gitverse/workflows/ (вместо .github/workflows/);
  • доступные раннеры и их метки могут отличаться;
  • некоторые GitHub-specific действия могут требовать адаптации для GitVerse.

Если у вас уже есть workflow из GitHub, начните с копирования файлов в каталог .gitverse/workflows/ и проверьте, что все действия работают корректно.

Доступен ли CI/CD для зеркальных репозиториев?

Если ваш репозиторий импортирован в GitVerse как зеркало, то для него CI/CD недоступен.

Зеркальные репозитории предназначены только для синхронизации кода из внешнего источника и не поддерживают workflow, раннеры и другие CI/CD функции. Если вам нужен CI/CD, создайте обычный репозиторий или форк вместо зеркального.

Почему раннер не берет задания в работу?

Если задача висит в статусе «В ожидании», а затем помечается «Отменено», это означает, что не найден подходящий раннер. Проверьте следующие параметры:

  1. Параметр runs-on в workflow: убедитесь, что метка раннера указана корректно. Например, runs-on: self-hosted требует, чтобы хотя бы один пользовательский раннер с меткой self-hosted был подключен и активен.

  2. Статус раннера: проверьте, что раннер подключен к GitVerse и имеет статус «Активен». Если раннер отключен или не отвечает, job не будет назначена.

  3. Лимиты облачного раннера: если вы используете облачный раннер, проверьте лимиты использования. Возможно, исчерпан лимит сборочного времени или квоты на количество параллельных job.

  4. Параметр capacity раннера: убедитесь, что параметр capacity в конфигурации runner позволяет выполнять новые job. Если все слоты заняты, job будет ждать.

Ошибка 401 при скачивании Docker-образа при запуске runner

Ошибка 401 (Unauthorized) при скачивании Docker-образа обычно связана с неверной аутентификацией в частном реестре Docker.

Убедитесь, что в секретах или переменных заданы оба параметра: DOCKER_USERNAME и DOCKER_PASSWORD (и что они корректны). Часто ошибка 401 возникает, если вместо пары логин/пароль указано что-то неверно, одно из полей пусто или дублируется.

Проверьте:

  • DOCKER_USERNAME содержит имя пользователя в реестре;
  • DOCKER_PASSWORD содержит пароль или token доступа;
  • оба параметра установлены на том же уровне (репозиторий или организация), где выполняется workflow.

Устранение других ошибок

Если вы столкнулись с проблемой в работе CI/CD или платформы в целом, при обращении в службу поддержки может потребоваться записать HAR-файл (HTTP Archive):

HAR-файлы помогают нашей службе поддержки диагностировать проблемы с сетевыми запросами, отлаживать ситуации с некорректной работой страниц или анализировать ошибки, возникающие при взаимодействии с платформой GitVerse (например, проблемы с webhook, интеграциями или отображением данных в интерфейсе CI/CD).