【问题标题】:Github workflow, job not executed even when job.needs successfulGithub工作流程,即使job.needs成功也不会执行作业
【发布时间】:2021-04-20 10:10:13
【问题描述】:

我对 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 成功时,为什么仍然没有按预期工作?

【问题讨论】:

    标签: github workflow github-actions


    【解决方案1】:

    这是您的job 4 依赖于job 2job 3job 2 失败的事实。因此,当您将job 4 作为job 5 的需要时,它不仅会检查job 4 的状态,还会检查其依赖项(在本例中为job 2job 3),并且由于job 2 失败,因此它未能通过评估需要job 5。奇怪的是忽略job 4 上的条件always()。它可能是一个错误或故意设计的。我不知道。但是,如果您删除 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

    【讨论】:

    • 问题是为什么跳过的作业被视为失败?您是否在某个地方的文档中找到了这个?我查看了文档,只能发现失败的工作是在取消或exit code != 0 时。您能否指出文档中的此信息或每个作业检查每个相关作业依赖项的信息?
    • 没有。我在文档中没有找到这个。我只是想出修改你的例子。但是,这与它在Azure DevOps 中的工作方式非常相似。但显然这是不同的工具,但在这方面它们的工作原理几乎相同。
    • 我曾经偶然发现过这份报告,但认为它与我的问题无关。但是在阅读了更多之后,这就是我的工作流程中正在发生的事情。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多