GitHub Workflow schedule触发不生效 如何实现双触发兼容
问题结论
你的推测完全正确。
定时触发失效的核心原因是:
- 当工作流被
schedule事件触发时,GitHub 提供的事件上下文github.event中不存在workflow_run字段,此时github.event.workflow_run.conclusion取值为空,你配置的if判断条件计算结果为false,扫描任务的job会被直接跳过,因此不会实际执行。 - 原有
if条件只适配了workflow_run这一种触发场景,没有兼容定时触发的事件上下文。
修改方案
调整job级别的if判断逻辑,同时覆盖两种触发场景的放行规则:
- 如果是定时(
schedule)触发,直接允许job执行 - 如果是上游工作流完成(
workflow_run)触发,仅在上游工作流执行结果为success时允许job执行
修改后的if条件写法如下:
if: github.event_name == 'schedule' || (github.event_name == 'workflow_run' && github.event.workflow_run.conclusion == 'success')
替换原有配置中job下的if行即可,修改后完整的job配置参考:
jobs: app-dependencies-vulnerabilities: name: Scan for vulnerability if: github.event_name == 'schedule' || (github.event_name == 'workflow_run' && github.event.workflow_run.conclusion == 'success') runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Running snyk uses: snyk/actions/gradle@master with: command: monitor args: --org=myorg --project-name=${{ github.repository }} --remote-repo-url=https://github.com/${{ github.repository }}.git json: true
补充说明
你原有配置中workflow_run事件监听的completed类型,会在上游工作流所有结束状态(成功、失败、取消、超时等)下都触发当前工作流,修改后的判断条件保留了原有的过滤逻辑,不会在上游工作流执行失败时误跑扫描任务,符合预期规则。
内容的提问来源于stack exchange,提问作者user16269092
相关产品推荐
相关产品推荐

