Github 工作流程,即使 job.needs 成功,作业也不会执行

时间:2021-01-15 11:14:05

标签: github workflow github-actions

我对 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

工作流可视化如下所示: workflow

我可以使用例如:

  job_5:
    needs: job_4
    if: always() && needs.job_4.result == 'success'
    runs-on: ubuntu-18.04
    steps:
        - run: echo JOB5

但是为什么当 job_4 成功时它没有按预期工作?

1 个答案:

答案 0 :(得分:1)

这是因为您的 job 4 依赖于 job 2job 3job 2 失败了。因此,当您将 job 4 作为 job 5 的需要时,它不仅会检查 job 4 的状态,还会检查其依赖项(在本例中为 job 2job 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

enter image description here

所以如果这个结构是你需要的,你应该使用你的解决方法。

您可以在 support community 上创建主题,因为这确实可能是一个错误。

GitHub 上有一个未解决的问题 - Job-level "if" condition not evaluated correctly if job in "needs" property is skipped