You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Actions工作流中环境自动审批功能失效问题排查

解决方案:仅item2环境自动审批(支持Windows/非Windows Runner)

一、第三方action失效的常见原因

  • 权限不足:该action未获取到deployments: write权限,无法调用环境审批API
  • 环境规则冲突:若item2环境勾选了强制手动审批或等待定时器,自动审批会被GitHub系统拦截
  • Action版本bug:旧版本可能存在矩阵环境名称匹配错误的问题

二、替代实现方案(跨平台兼容)

直接用GitHub官方工具或API实现自动审批,稳定性和兼容性更强。

1. 配置工作流基础权限

在工作流开头添加权限声明,确保操作部署的权限:

permissions:
  deployments: write  # 必须项,用于操作环境审批
  contents: read       # 按需调整,满足代码拉取等基础需求

2. 自动审批逻辑(两种可选方案)

在deploy作业中添加条件步骤,仅对item2环境执行自动审批:

方案A:用GitHub CLI(推荐,跨平台无依赖)

jobs:
  deploy:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest]
        environment: [item1, item2]
    environment: ${{ matrix.environment }}
    steps:
      - name: 拉取代码
        uses: actions/checkout@v4

      # 这里添加你的部署前置步骤(如构建、打包等)

      - name: 自动审批item2环境
        if: matrix.environment == 'item2'
        run: |
          # 获取当前待审批的部署ID
          DEPLOYMENT_ID=$(gh api repos/${{ github.repository }}/deployments --jq '.[] | select(.environment == "${{ matrix.environment }}" and .status == "pending") | .id' | head -n 1)
          # 发送审批请求
          gh api repos/${{ github.repository }}/deployments/$DEPLOYMENT_ID/environments/${{ matrix.environment }}/approvals -X POST -f state=approved -f comment="通过GitHub Actions自动审批"
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

方案B:直接调用GitHub API(无需CLI)

适用于不想安装GitHub CLI的场景,Windows和非Windows runner均自带curl和jq:

- name: 自动审批item2环境
        if: matrix.environment == 'item2'
        run: |
          # 获取待审批部署ID
          DEPLOYMENT_ID=$(curl -s -H "Authorization: token $GITHUB_TOKEN" "https://api.github.com/repos/$GITHUB_REPOSITORY/deployments" | jq '.[] | select(.environment == "${{ matrix.environment }}" and .status == "pending") | .id' | head -n 1)
          # 提交审批
          curl -s -X POST -H "Authorization: token $GITHUB_TOKEN" -H "Accept: application/vnd.github.v3+json" "https://api.github.com/repos/$GITHUB_REPOSITORY/deployments/$DEPLOYMENT_ID/environments/${{ matrix.environment }}/approvals" -d '{"state":"approved","comment":"通过GitHub Actions自动审批"}'
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          GITHUB_REPOSITORY: ${{ github.repository }}

3. 环境审批规则校验

进入仓库Settings > Environments > item2,确认:

  • 已添加mohtashims为必填审批人
  • 未勾选Wait timer(否则自动审批也要等定时器结束)
  • 若需限制仅mohtashims触发时自动审批,可在步骤条件中追加&& github.actor == 'mohtashims'

三、测试用例

测试1:item1环境强制手动审批

  • 触发工作流后,查看item1环境的部署状态,应显示「等待审批」
  • 验证:只有mohtashims手动点击审批后,item1的部署作业才会继续执行

测试2:item2环境自动审批

  • 触发工作流后,查看item2环境的部署日志,确认「自动审批item2环境」步骤执行成功
  • 验证:item2的部署作业无需手动操作,1分钟内自动进入执行阶段

测试3:跨平台runner兼容性

  • 分别触发ubuntu-latest和windows-latest runner的工作流
  • 验证:两种runner下,item2的自动审批步骤均无报错,正常完成审批

内容的提问来源于stack exchange,提问作者Ashar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 01:42:03