Github 工作流程,即使 job.needs 成功,作业也不会执行
Github workflow, job not executed even when job.needs successful
我在 Github 工作流程中遇到了一个奇怪的问题。即使来自 needs
(job_4
) 的作业已执行并成功,最后一个作业 job_5
也不会执行。谁能告诉我这是为什么?
工作流文件:
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
成功时却没有按预期工作?
这就是你的 job 4
依赖于 job 2
和 job 3
以及 job 2
失败的事实。因此,当您将 job 4
作为 job 5
的需要时,它不仅会检查 job 4
的状态,还会检查其依赖项(在本例中为 job 2
和 job 3
)和由于 job 2
失败,因此未能满足 job 5
的评估需求。奇怪的是忽略 job 4
上的条件 always()
。它可能是错误或故意设计的。我不知道。但是,如果您删除 job 2
一切正常
#
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 上存在未解决的问题 -
如果跳过“需要”属性 中的工作。
,则工作级别“if”条件未正确评估
我在 Github 工作流程中遇到了一个奇怪的问题。即使来自 needs
(job_4
) 的作业已执行并成功,最后一个作业 job_5
也不会执行。谁能告诉我这是为什么?
工作流文件:
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
成功时却没有按预期工作?
这就是你的 job 4
依赖于 job 2
和 job 3
以及 job 2
失败的事实。因此,当您将 job 4
作为 job 5
的需要时,它不仅会检查 job 4
的状态,还会检查其依赖项(在本例中为 job 2
和 job 3
)和由于 job 2
失败,因此未能满足 job 5
的评估需求。奇怪的是忽略 job 4
上的条件 always()
。它可能是错误或故意设计的。我不知道。但是,如果您删除 job 2
一切正常
#
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 上存在未解决的问题 - 如果跳过“需要”属性 中的工作。
,则工作级别“if”条件未正确评估