CI/CD при защите ветки

CI/CD при защите ветки

Подготовительные действия

Установите docker, скачайте раннер и настройте CICD_branch_protection_demo.yaml файл конфигурации CI/CD.

💡

Для проверки примеров CI/CD с конфигурацией CICD_branch_protection_demo.yaml доступен репозиторий CICD_examples, ветка CICD_branch_protection_demo (opens in a new tab), в нем:

  • подготовлен файл конфигурации .gitverse/workflows/CICD_branch_protection_demo.yaml;
  • загружен раннер act_runner.

Конфигурация CICD_branch_protection_demo.yaml

Файл CICD_branch_protection_demo.yaml следует расположить в директории .gitverse/workflows/ вашего проекта, он определяет конфигурацию работы CI/CD для GitVerse:

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
⚠️

Раннер так же обработает .yaml файлы в директории .github/workflows.

Структура:

  • name: Демонстрация защиты ветки - название конфигурации CI/CD;
  • on: pull_request: - указывает, что конфигурация будет запускаться при событиях pull request;
  • jobs: - оределяет список задач, которые нужно выполнить:
    • build-test:
      • name: CICD branch protection - название этой конкретной задачи;
      • runs-on: ubuntu-latest - указывает, что задача будет выполняться на последней версии Ubuntu;
      • 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 - условие проверяет, содержит ли заголовок запроса слово "TASK-".Если содержит, то:
              • echo "Pull request title contains 'TASK-'" - выводится сообщение "Pull request title contains 'TASK-'":
            • else - если не содержит, то:
              • echo "Pull request title does not contain 'TASK-'" выводится сообщение "Pull request title does not contain 'TASK-'";
              • exit 1 - и завершает выполнение с ошибкой;
            • fi - конец условия.

Настройка защиты ветки с проверкой статуса

  1. В профиле репозитория на вкладке Настройки > Репозиторий включите CI/CD, Запросы на слияние и нажмите Обновить:

    Отобразятся новые вкладки:

  2. Создайте новое правило:

    Далее:

Получение токена и запуск раннера

  1. Создайте токен раннера:

  2. Запустите раннер. Пример регистрации и запуска раннера в докер контейнере c полученным токеном:

    sudo docker run \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -e INSTANCE_URL=https://gitverse.ru/sc/ \
    -e RUNNER_REGISTRATION_TOKEN=IfFghH5STMA6jbAausBUHw4NsVwWabCtd2rpWrTq \
    gitverse.ru/gitverse/act-runner:3.0.4

Создание и проверка запроса

  1. Для создания запроса перейдите на вкладку Запросы и нажмите Создать новый запрос:

    Заполните форму создания запроса:

  2. Отобразится страница запроса, где слияние недоступно, пока не будет выполнена успешная проверка:

  3. После успешной проверки слияние станет доступно:

Проверка статуса задачи

  1. На странице запроса нажмите Подробнее:

  2. На статусе задачи видно, что сообщение в запросе содержит слово TASK- и поэтому проверка прошла успешно.

    Вывод сообщения из запроса:

    Результат проверки:

Связанные разделы

  1. Запуск локального раннера с ограничениями на ресурсы.
  2. Включение/выключение CI/CD.
  3. Внесение изменений в ветку и создание коммитов.
  4. Работа с терминалом.
  5. СI/CD.