GitHub Actions前序工作流失败仍触发后续工作流原因排查
问题原因
workflow_run的completed触发类型不会校验上游工作流的执行结果:只要被监听的工作流运行终止,不管是成功、失败、被取消还是超时,都会触发下游工作流。你当前的配置只声明了监听Security工作流的完成事件,没有在下游工作流里添加上游运行状态的判断逻辑,自然会出现Security执行失败时Deploy工作流仍然启动的情况。
另外你现有配置还有个隐藏的逻辑错误:workflow_run事件触发时,默认的github.ref指向的是当前仓库的默认分支,而非上游Security工作流实际运行的代码分支,你原来写的分支判断规则在这个触发场景下是不生效的。
修复方式
修改工作流B(Deploy dev og prod)的配置,在对应job的if条件中补充两个校验规则:
- 上游Security工作流最终执行结果为成功
- 上游工作流运行的代码分支为dev或master
修改后的工作流B完整配置如下:
name: Deploy dev og prod on: workflow_run: workflows: ["Security"] types: - completed env: IMAGE: ghcr.io/${{ github.repository }}:${{ github.sha }} jobs: deploy-dev-gcp: name: Deploy til dev-gcp if: ${{ github.event.workflow_run.conclusion == 'success' && (github.event.workflow_run.head_branch == 'dev' || github.event.workflow_run.head_branch == 'master') }} runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - uses: nais/deploy/actions/deploy@v1 env: APIKEY: ${{ secrets.NAIS_DEPLOY_APIKEY }} CLUSTER: dev-gcp RESOURCE: .nais/naiserator.yaml VARS: .nais/dev-gcp.json
如果后续给该工作流新增其他需要依赖Security成功结果的job,记得给每个job都加上github.event.workflow_run.conclusion == 'success'的判断条件即可。
内容的提问来源于stack exchange,提问作者user16269092
相关产品推荐
相关产品推荐

