CI/CD при защите ветки
Рассмотрим сценарий, когда включена защита ветки (branch protection) и требуется запускать CI-проверки при каждом запросе на слияние.
Для демонстрации этого сценария подготовлен репозиторий CICD_examples (в организации gitverse_tutorials) с веткой CICD_branch_protection_demo:
- в репозиторий уже добавлен файл конфигурации .gitverse/workflows/CICD_branch_protection_demo.yaml;
- запущен self-hosted раннер (для выполнения задачи).
Конфигурация CI/CD
Файл CICD_branch_protection_demo.yaml (разместите его в директории .gitverse/workflows/ вашего проекта) определяет следующий pipeline:
name: Демонстрация защиты ветки
on:
pull_request:
jobs:
build-test:
name: CICD branch protection
runs-on: ubuntu-latest
steps:
- name: Display pull request title
run: echo ${{ github.event.pull_request.title }}
- name: Display commit message
run: echo ${{ github.event.head_commit.message }}
- name: Check pull request title
run: |
if [[ "${{ github.event.pull_request.title }}" == *"TASK-"* ]]; then
echo "Pull request title contains 'TASK-'"
else
echo "Pull request title does not contain 'TASK-'"
exit 1
fi(Внимание: self-hosted раннер GitVerse также обрабатывает YAML-файлы, расположенные в директории .github/workflows — они эквивалентны .gitverse/workflows.)
Структура конфигурации:
name: Демонстрация защиты ветки— название CI/CD-конфигурации.on: pull_request— указывает запуск workflow при событиях запроса на слияние.jobs:— начало определения списка задач.build-test:— идентификатор задачи.name: CICD branch protection— имя задачи.runs-on: ubuntu-latest— задача выполняется на облачном раннере с ОС Ubuntu.steps— перечень шагов задачи:name: Display pull request title— шаг, выводящий заголовок PR:run: echo ${{ github.event.pull_request.title }}— выводит заголовок PR.name: Display commit message— шаг, выводящий сообщение коммита:run: echo ${{ github.event.head_commit.message }}— выводит сообщение коммита.name: Check pull request title— шаг-проверка заголовка PR:run: |— начало многострочного сценария:if [[ "${{ github.event.pull_request.title }}" == *"TASK-"* ]]; then— проверяет, содержит ли заголовок строку “TASK-”. Если содержит, то:echo "Pull request title contains 'TASK-'"— выводится сообщение о наличии метки “TASK-” в заголовке.else— если не содержит, то:echo "Pull request title does not contain 'TASK-'"— выводится сообщение об отсутствии “TASK-” в заголовке;exit 1— завершается с ошибкой (проверка провалена).fi— конец условия.
Настройка защиты ветки
- В настройках репозитория на вкладке Настройки -> Репозиторий включите опции CI/CD и Запросы на слияние (после чего нажмите Обновить настройки). После этого на странице репозитория появятся новые вкладки, включая вкладку Запросы.
- Перейдите на вкладку Запросы и создайте новое правило защиты ветки, добавив требование успешного выполнения задачи
build-testперед слиянием запроса.
Получение токена и запуск раннера
Для выполнения проверки необходим активный self-hosted раннер (в примере используется Docker-контейнер с раннером):
- Сгенерируйте токен регистрации раннера (в настройках репозитория или организации на вкладке Раннеры нажмите Добавить раннер и скопируйте токен).
- Запустите раннер, передав ему токен. Например, командой:
sudo docker run \
-v /var/run/docker.sock:/var/run/docker.sock \
-e INSTANCE_URL=https://gitverse.ru/sc/ \
-e RUNNER_REGISTRATION_TOKEN=<ВАШ_ТОКЕН> \
gitverse.ru/gitverse/act-runner:4.3.0(Вместо <ВАШ_ТОКЕН> подставьте полученный регистрационный токен.)
Создание и проверка запроса на слияние
- Создайте новый запрос на слияние: на вкладке Запросы нажмите Создать новый запрос, выберите ветку для слияния и заполните необходимые поля, затем создайте PR.
- Когда workflow
Демонстрация защиты веткиотработает и завершится успешно (заголовок PR содержит “TASK-”), статус проверки изменится на «успешно», и кнопка слияния станет активной (слияние разрешено). - ППосле создания запроса на его странице будет отображаться, что слияние недоступно до тех пор, пока не пройдет успешная CI/CD-проверка (статус проверки будет в состоянии «в ожидании»).
Просмотр статуса задачи
Для просмотра подробного статуса задачи CI/CD:
2. Вы увидите логи выполнения задачи build-test. В нашем случае там будет сообщение о том, что заголовок содержит “TASK-” (или не содержит, если бы проверка провалилась). Поскольку в нашем примере заголовок удовлетворял условию, workflow завершился успешно, и статус проверки стал зелёным («Успешно»).
- На странице запроса на слияние нажмите кнопку Подробнее рядом со статусом проверки, чтобы перейти к деталям workflow.