Не удается одобрить развертывание через CLI/REST API, даже когда есть ожидающие развертывания.

Вопрос или проблема

У меня есть случай, когда для данной среды некоторые репозитории могут быть настроены на автоматическое развертывание, в то время как другие требуют ручного одобрения. Я выбрал подход с использованием другого параллельного задания для автоматического одобрения, когда это необходимо.

jobs:
  job-before-staging:
    # Любое задание перед заданием, возможно требующим одобрения.
    # Нам нужно это, чтобы зафиксировать следующее два задания для параллельного выполнения.

  # эта среда имеет правила защиты развертывания, требует ручного одобрения
  deploy-staging:
    needs: job-before-staging
    env: STAGING
    if: runStaging == true
    # ... шаги развертывания здесь


  # здесь не объявлена среда
  staging-auto-approval:
    needs: job-before-staging
    if: runStaging == true && requireStagingApproval == false

    steps:
      - name: авто-одобрение-развертывания
        run: <API для одобрения задания>

Используя API, будь то через gh api или curl, я могу получить env id, job id и pending_approvals текущего задания. Я не могу заставить одобрение сработать.

Этот код работает, чтобы получить ожидающие развертывания:

gh api --verbose repos/$REPO/actions/runs/$RUNID/pending_deployments

Это возвращает данные в формате JSON, подтверждая, что он видит ожидающее развертывание.

Этот код для попытки одобрить ожидающее развертывание не срабатывает:

gh api --verbose                                      \
  repos/$REPO/actions/runs/$RUNID/pending_deployments \
  --method POST                                       \
  -F "environment_ids[]=$ENVID"                       \
  -f "state=approved"                                 \
  -f "comment=Авто-одобрено GitHub Actions"      

Результат:

{
  "comment": "Авто-одобрено GitHub Actions",
  "environment_ids": [
    11130481765
  ],
  "state": "approved"
}

...

{
  "message": "Ошибка валидации",
  "errors": "Нет ожидающих запросов на развертывание для одобрения или отклонения",
  "documentation_url": "https://docs.github.com/rest/actions/workflow-runs#review-pending-deployments-for-a-workflow-run",
  "status": "422"
}

* Запрос занял 469.770458ms
gh: Нет ожидающих запросов на развертывание для одобрения или отклонения (Ошибка валидации)

Я также использую этот блок разрешений, без эффекта:

    env:
      GH_TOKEN: ${{ github.token }}

    permissions:
      checks: write
      deployments: write
      actions: write

Ответ или решение

Чтобы решить проблему с автоматическим утверждением развертывания через CLI или REST API в условиях, когда есть ожидающие развертывания, вам необходимо убедиться в нескольких аспектах вашего кода и логики работы с GitHub Actions.

  1. Проверка состояния развертываний: Убедитесь, что ваше решение действительно получает ожидающее развертывание. Вы уже упомянули, что используете команду gh api --verbose repos/$REPO/actions/runs/$RUNID/pending_deployments, которая возвращает ожидающие развертывания. Это хороший первый шаг. Убедитесь, что перед тем как выполнять запрос на утверждение, вы действительно видите элементы в pending_deployments.

  2. Правильный формат запроса на утверждение: В вашем текущем подходе к отправке запроса на утверждение развертывания через API вы используете неправильный формат. По документации GitHub, правильный формат запроса на утверждение должен включать JSON-тело. Исправьте ваш запрос следующим образом:

gh api --verbose \
  repos/$REPO/actions/runs/$RUNID/pending_deployments \
  --method POST \
  -f state=approved \
  -f comment="Auto-Approved by GitHub Actions" \
  -F environment_ids[]=$ENVID
  1. Проверка прав доступа: Убедитесь, что ваш токен доступа (GH_TOKEN) имеет необходимые разрешения для выполнения операций с развертываниями. Вы уже добавили блок разрешений, но убедитесь, что токен действительно обладает этими правами:
env:
  GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
permissions:
  actions: write
  deployments: write
  checks: write
  1. Параметризация: Убедитесь, что значения переменных $REPO, $RUNID, и $ENVID устанавливаются правильно и что на момент выполнения команды они содержат ожидаемые значения.

  2. Отладка ответа: Если после всех изменений вы все еще получаете сообщение "Validation Failed", добавьте дополнительный вывод информации для отладки. Например, выведите содержимое переменной pending_deployments, чтобы напечатать их и удостовериться, что вы работаете с правильными идентификаторами.

  3. Убедитесь, что вы подключены в правильной среде: Ваша GitHub Actions может запускаться в разных контекстах или ветках. Убедитесь, что вы работаете в том же контексте, где развертывания требуют вручного утверждения.

Надеюсь, эти рекомендации помогут вам успешно автоматизировать процесс утверждения развертывания через CLI или API. Если проблема будет сохраняться, рекомендуется обратиться в службу поддержки GitHub для дальнейшей помощи.

Оцените материал
Добавить комментарий

Капча загружается...