我对 Github 工作流程有一个奇怪的问题。即使来自 job_5
(needs
) 的作业执行并成功,最后作业 job_4
也不会执行。谁能告诉我这是为什么?
工作流文件:
name: Test run v2
on:
workflow_dispatch:
jobs:
job_1:
runs-on: ubuntu-18.04
steps:
- run: echo JOB1
job_2:
needs: job_1
if: false
runs-on: ubuntu-18.04
steps:
- run: echo JOB2; exit 1;
job_3:
needs: job_1
runs-on: ubuntu-18.04
steps:
- run: echo JOB3
job_4:
needs: [job_2, job_3]
if: always()
runs-on: ubuntu-18.04
steps:
- run: echo JOB4
job_5:
needs: job_4
runs-on: ubuntu-18.04
steps:
- run: echo JOB5
我可以使用例如:
job_5:
needs: job_4
if: always() && needs.job_4.result == 'success'
runs-on: ubuntu-18.04
steps:
- run: echo JOB5
但是为什么当 job_4
成功时它没有按预期工作?
答案 0 :(得分:1)
这是因为您的 job 4
依赖于 job 2
而 job 3
和 job 2
失败了。因此,当您将 job 4
作为 job 5
的需要时,它不仅会检查 job 4
的状态,还会检查其依赖项(在本例中为 job 2
和 job 3
)和由于 job 2
失败,因此 job 5
的评估需求失败。奇怪的是忽略了 always()
上的条件 job 4
。它可能是一个错误或故意设计的。我不知道。但是,如果您删除 job 2
一切正常
# https://stackoverflow.com/questions/65735099/github-workflow-job-not-executed-even-when-job-needs-successful
name: Multiple jobs
on:
workflow_dispatch:
jobs:
job_1:
runs-on: ubuntu-18.04
steps:
- run: echo JOB1
job_2:
needs: job_1
if: false
runs-on: ubuntu-18.04
steps:
- run: echo JOB2; exit 1;
job_3:
needs: job_1
runs-on: ubuntu-18.04
steps:
- run: echo JOB3
job_4:
needs: [job_3]
if: always()
runs-on: ubuntu-18.04
steps:
- run: echo JOB4
job_5:
needs: job_4
runs-on: ubuntu-18.04
steps:
- run: echo JOB5
所以如果这个结构是你需要的,你应该使用你的解决方法。
您可以在 support community 上创建主题,因为这确实可能是一个错误。
GitHub 上有一个未解决的问题 - Job-level "if" condition not evaluated correctly if job in "needs" property is skipped。