如何执行依赖已跳过任务的GitHub Actions任务?
可行,操作方法如下
默认情况下,GitHub Actions里用needs指定依赖任务时,只有所有依赖任务成功完成,当前任务才会启动;如果依赖任务被跳过,当前任务也会跟着被跳过。要让conditional-job不管依赖的skip-job、deploy和build(按你需求)是成功还是被跳过都能执行,只要修改它的if条件就行。
具体修改方案
调整conditional-job的if条件,明确允许依赖任务处于成功或跳过状态:
name: My GitHub Actions Workflow on: push: branches: - main jobs: build: runs-on: ubuntu-latest steps: - name: This job runs on main branch push run: echo "JOB name build" deploy: if: ${{ false }} runs-on: ubuntu-latest steps: - name: This job is skipped run: echo "JOB name deploy" # 部署步骤... skip-job: if: ${{ false }} # 这个任务永远不会执行 runs-on: ubuntu-latest steps: - name: This job is skipped run: echo "This job won't run because the if condition is set to false" conditional-job: needs: - skip-job - deploy - build # 按需求添加build作为依赖 # 条件1:所有依赖要么成功要么跳过,才执行 if: ${{ every(needs.*.result, result => result == 'success' || result == 'skipped') }} # 条件2:完全无视依赖状态(失败也执行),用下面这行替换上面的if # if: ${{ always() }} runs-on: ubuntu-latest steps: - name: This job runs regardless of dependencies' status run: echo "JOB name conditional-job"
关键说明
needs.*.result:能拿到所有依赖任务的执行结果,可选值有success、failure、skipped三种。- 用
every(...)的条件:确保所有依赖任务要么成功要么跳过,符合要求才执行conditional-job,适合不想让依赖失败时执行的场景。 - 用
always()的条件:最宽松,不管依赖任务是成功、失败还是跳过,conditional-job都会执行,适合完全不关心依赖状态的场景。
另外,你原来的conditional-job依赖里没加build,如果需要依赖它的话记得加到needs列表里,按需调整就行。
内容的提问来源于stack exchange,提问作者Ashar
相关产品推荐
相关产品推荐

