Настроить ручное подтверждение заданий CI/CD в SourceCraft

Задание с ручным подтверждением не запускается автоматически после успешного выполнения зависимостей, а ожидает решения пользователя: подтвердить (approve) или отклонить (reject) выполнение. Такой механизм позволяет, например, проверить результат перед развертыванием в продуктовом окружении.

Важно

Принять решение в интерфейсе SourceCraft может пользователь репозитория с ролью не ниже Разработчик репозитория.

Чтобы использовать ручное подтверждение:

  1. Включите ручное подтверждение в конфигурации CI/CD.
  2. Подтвердите или отклоните выполнение задания.

Включить ручное подтверждение

  1. Настройте CI/CD в репозитории, если еще этого не сделали.

  2. Откройте файл .sourcecraft/ci.yaml.

  3. В блоке workflows:tasks найдите задание, выполнение которого нужно подтверждать вручную, и добавьте в его описание параметр approval.

    Важно

    Параметр approval задает настройки ручного подтверждения выполнения задания внутри блока workflows:tasks. Его нельзя использовать в заданиях верхнего уровня, описанных в отдельном блоке tasks вне workflows.

    Поддерживаются следующие формы записи:

    • approval: true — включить ручное подтверждение со временем ожидания по умолчанию — 24 часа.
    • approval: false — явно отключить ручное подтверждение. Эквивалентно отсутствию параметра approval.
    • approval: {} — включить ручное подтверждение с параметрами по умолчанию.
    • approval: { timeout: ..., note: ..., require_comment: ... } — включить ручное подтверждение с явно заданными параметрами.

    В блоке approval поддерживаются следующие параметры. Все параметры опциональны:

    • timeout — максимальное время ожидания решения, например 1h или 2h. Значение по умолчанию — 24h. Время отсчитывается с момента перехода задания в статус AwaitingApproval. По истечении этого времени задание автоматически отменяется.
    • note — инструкция для пользователя, который принимает решение. Задается строкой длиной до 1000 символов и отображается в интерфейсе. По умолчанию не задана.
    • require_comment — требование добавить комментарий при подтверждении или отклонении задания. Задается логическим значением. Значение по умолчанию — false. Если установлено значение true, принять решение можно только с комментарием. Максимальная длина комментария — 2000 символов, не зависит от значения require_comment.

    Например, задайте зависимость от задания сборки, время ожидания, инструкцию и требование комментария:

    workflows:
      deploy:
        tasks:
          - name: build
            cubes:
              - name: build-cube
                script:
                  - echo "build"
          - name: deploy-prod
            needs: [build]
            approval:
              timeout: 2h
              note: "Проверьте дашборды тестового окружения"
              require_comment: true
            cubes:
              - name: deploy-cube
                script:
                  - echo "deploy"
    

    В этом примере после успешного выполнения задания build задание deploy-prod будет ожидать решения пользователя до двух часов. Для подтверждения или отклонения выполнения потребуется комментарий. Команды echo иллюстрируют порядок выполнения заданий: замените их командами сборки и развертывания вашего приложения.

  4. Сохраните изменения в репозитории. Если вы редактируете файл в интерфейсе SourceCraft:

    1. В правом верхнем углу нажмите Сохранить изменения.

    2. В открывшемся окне настройте параметры внесения изменений:

      • В поле Сообщение об изменениях укажите комментарий, который опишет внесенные изменения.
      • В блоке Ветка изменений выберите, в какую ветку внести изменения. При необходимости создайте новую ветку.
      • В блоке Действие после сохранения изменений выберите действие после сохранения изменений: Сохранить и создать новое предложение изменений или Просто сохранить.
    3. Подтвердите внесение изменений.

  5. Запустите рабочий процесс вручную, выбрав ветку с обновленным файлом .sourcecraft/ci.yaml и нужный рабочий процесс. Для приведенного примера выберите deploy.

Подтвердить или отклонить выполнение задания

  1. Откройте репозиторий в интерфейсе SourceCraft.
  2. В разделе Код перейдите в секцию CI/CD.
  3. Выберите запуск с нужным рабочим процессом. У запусков, ожидающих подтверждение, отображается статус Ожидание.
  4. Дождитесь статуса Ожидание подтверждения (AwaitingApproval). Если у задания есть зависимости, сначала дождитесь их успешного выполнения.
  5. Напротив задания нажмите Рассмотреть.
  6. В окне Требуется подтверждение ознакомьтесь с инструкцией из параметра note, если она задана, и проверьте результаты предыдущих заданий.
  7. В поле Комментарий укажите причину решения. Комментарий обязателен при require_comment: true. Максимальная длина — 2000 символов.
  8. Нажмите Одобрить, чтобы разрешить выполнение задания, или Отклонить, чтобы отклонить его.
  9. Проверьте результат: после подтверждения задание будет передано в очередь выполнения, а после отклонения получит статус Rejected.

Если ручное подтверждение включено, после запуска CI/CD задание создается в статусе Created и помещается в очередь ожидания. Пока зависимости, заданные в параметре needs, выполняются, задание остается в этом статусе. После успешного выполнения зависимостей или при их отсутствии задание переходит в статус AwaitingApproval. С этого момента начинается отсчет времени ожидания решения.

Возможные результаты ожидания:

  • Подтверждение (approve) — задание переносится в очередь выполнения и запускается в обычном режиме. В сведениях о решении сохраняются результат approved, автор и комментарий.
  • Отклонение (reject) — задание получает статус Rejected и удаляется из очереди ожидания. В сведениях о решении сохраняются результат rejected, информация об авторе и комментарий. Статус Rejected распространяется на рабочий процесс и весь запуск CI/CD.
  • Истечение времени ожидания (expire) — если решение не принято вовремя, задание получает статус Canceled, а в сведениях о решении сохраняется результат expired. Статус Canceled распространяется на рабочий процесс и весь запуск CI/CD.

Примечание

При работе с ручным подтверждением учитывайте следующие ограничения:

  • Решение по заданию принимается один раз. Повторная попытка отклоняется с результатом ALREADY_DECIDED.
  • Если задано require_comment: true, попытка принять решение без комментария отклоняется с результатом COMMENT_REQUIRED.
  • При отмене запуска CI/CD задание в статусе AwaitingApproval также получает статус Canceled.
  • Если одна из зависимостей задания завершается неуспешно, задание получает статус Canceled и удаляется из очереди ожидания.

Полезные ссылки