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-latestrunner的工作流 - 验证:两种runner下,item2的自动审批步骤均无报错,正常完成审批
内容的提问来源于stack exchange,提问作者Ashar
相关产品推荐
相关产品推荐

