GitHub Actions复用工作流报错:如何按日期控制作业执行?
解决GitHub Actions复用工作流的日期控制问题
问题根源
你之前的写法把复用工作流嵌套在了steps里,但GitHub Actions规定复用工作流必须作为整个Job的顶层配置项,不能放在步骤中,这就是报错reusable workflows should be referenced at the top-level jobs.*.uses' key, not within steps.的原因。
调整方案
要实现周五、周六、周日不运行该作业(仅周一到周四执行),需要拆分出单独的Job来判断日期,再让复用工作流的Job依赖这个判断结果:
jobs: # 单独的Job:获取当前星期几 check_day: runs-on: ubuntu-latest outputs: day: ${{ steps.get_day.outputs.day }} steps: - name: 获取星期几(1=周一,7=周日) id: get_day run: echo "::set-output name=day::$(date +%u)" # 复用工作流的Job:仅在周一到周四执行 bd_scan: needs: check_day if: ${{ needs.check_day.outputs.day <= '4' }} uses: some-external-workflow-here with: GRADLE_BUILD: "no" NODE_BUILD: "no" RETRY: 3 secrets: inherit
方案说明
check_dayJob:专门用来获取当前星期几(date +%u返回1到7,对应周一到周日),并通过outputs把结果暴露给其他Job。bd_scanJob:通过needs依赖check_day,拿到星期几的结果后,用if条件判断只有当值≤4(周一到周四)时才会执行,同时把复用工作流放在Job的顶层uses字段,符合GitHub Actions的规则。
补充:定时触发场景的简化写法
如果你的工作流是定时触发的,也可以直接在触发规则里指定周一到周四,不用额外写判断Job:
on: schedule: - cron: '0 0 * * 1-4' # 每周一到周四的0点(UTC时间)触发 jobs: bd_scan: uses: some-external-workflow-here with: GRADLE_BUILD: "no" NODE_BUILD: "no" RETRY: 3 secrets: inherit
内容的提问来源于stack exchange,提问作者Makruzz
相关产品推荐
相关产品推荐

