GitHub 操作:使作业依赖于数组中的至少一项其他作业,但不是全部

GitHub Actions: make job dependent on at least one other job from an array, but not all of them

在我的 GitHub 工作流程中,我有一项完成工作,即在所有其他工作完成后将覆盖率报告上传到 Coveralls。

jobs:
  foo: ...
  bar: ...
  finish:
    needs:
      - foo
      - bar

如果 foobar 失败,或者它被跳过(为什么一个作业可能被跳过与这个问题无关),finish 作业不会是 运行.

如果 至少 needs 字段中提供的其中一项工作是 finish 运行 =26=] 成功了吗?

目前无法在工作流中本地获取 job.statusjob.conclusion 以通过条件在其他作业中检查它们。

解决方法 可以使用 outputsartifacts 始终保存每个作业状态。

这里是一个示例,使用 artifacts 和 3 个作业,其中第三个作业将在执行某些操作之前检查前两个作业的状态:

jobs:
  JOB_01:
    name: Job 01
    . . .
    steps:
      - name: Some steps of job 01
      . . .
      - name: Create file status_job01.txt and write the job status into it
        if: always()
        run: |
          echo ${{ job.status }} > status_job01.txt

      - name: Upload file status_job01.txt as an artifact
        if: always()
        uses: actions/upload-artifact@v1
        with:
          name: pass_status_job01
          path: status_job01.txt

  JOB_02:
    name: Job 02
    . . .
    steps:
      - name: Some steps of job 02
      . . .
      - name: Create file status_job02.txt and write the job status into it
        if: always()
        run: |
          echo ${{ job.status }} > status_job02.txt

      - name: Upload file status_job02.txt as an artifact
        if: always()
        uses: actions/upload-artifact@v1
        with:
          name: pass_status_job02
          path: status_job02.txt

  JOB_03:
    needs: [JOB_01, JOB_02]
    if: always()
    name: Job 03
    . . .
    steps:
      - name: Download artifact pass_status_job01
        uses: actions/download-artifact@v1
        with:
          name: pass_status_job01

      - name: Download artifact pass_status_job02
        uses: actions/download-artifact@v1
        with:
          name: pass_status_job02

      - name: Set the statuses of Job 01 and Job 02 as output parameters
        id: set_outputs
        run: |
          echo "::set-output name=status_job01::$(<pass_status_job01/status_job01.txt)"
          echo "::set-output name=status_job02::$(<pass_status_job02/status_job02.txt)"

      - name: Show the values of the outputs
        run: |
          # using the syntax steps.<step_id>.outputs.<output_name> to access the output parameters
          echo "status_job01 = ${{ steps.set_outputs.outputs.status_job01 }}"
          echo "status_job02 = ${{ steps.set_outputs.outputs.status_job02 }}"

      - name: Some other steps of job 03
      . . .

其中 other steps of job03 将取决于您从其他作业获得的输出结果,是否执行操作。

您可以在以下链接中找到有关此示例的更多参考资料:

我这里也写了个例子: