能否在GitHub Workflow内部条件性删除对应的Workflow Run记录?
解决方案:在GitHub Actions工作流中条件删除未触发构建的运行记录
可以通过调用GitHub API实现这个需求,具体步骤如下:
- 首先生成一个具备
workflow:write权限的Personal Access Token(PAT),将其添加到仓库的Secrets中(比如命名为GH_PAT),这是调用删除API的必要权限。 - 修改你的工作流文件,先判断提交信息是否包含
[trigger ci],如果不包含,则调用API删除当前的工作流运行记录。
以下是完整的工作流示例:
name: CI on: [push] jobs: ci-control: runs-on: self-hosted steps: - name: 判断是否触发CI id: trigger_check run: | COMMIT_MSG="${{ github.event.head_commit.message }}" if echo "$COMMIT_MSG" | grep -q "\[trigger ci\]"; then echo "triggered=true" >> $GITHUB_OUTPUT else echo "triggered=false" >> $GITHUB_OUTPUT fi - name: 删除未触发的工作流运行记录 if: steps.trigger_check.outputs.triggered == 'false' run: | curl -X DELETE \ -H "Authorization: token ${{ secrets.GH_PAT }}" \ "https://api.github.com/repos/${{ github.repository }}/actions/runs/${{ github.run_id }}" - name: 执行CI构建任务 if: steps.trigger_check.outputs.triggered == 'true' run: | # 这里替换成你的实际构建命令 echo "开始执行CI构建..." # 比如:npm install && npm run build
需要注意的细节:
- 权限验证:确保PAT的
workflow:write权限已开启,且Secrets配置正确,否则API调用会失败。 - 延迟问题:调用删除API后,工作流列表可能需要几秒才能刷新显示删除结果。
- 可选优化:如果不需要在自托管 runner 上执行删除步骤,也可以改用GitHub托管的
ubuntu-latestrunner来执行删除,减少自托管资源占用。
内容的提问来源于stack exchange,提问作者starikcetin
相关产品推荐
相关产品推荐

