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 2job 3 以及 job 2 失败的事实。因此,当您将 job 4 作为 job 5 的需要时,它不仅会检查 job 4 的状态,还会检查其依赖项(在本例中为 job 2job 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”条件未正确评估