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
如果 foo
或 bar
失败,或者它被跳过(为什么一个作业可能被跳过与这个问题无关),finish
作业不会是 运行.
如果 至少 needs
字段中提供的其中一项工作是 finish
运行 =26=] 成功了吗?
目前无法在工作流中本地获取 job.status
或 job.conclusion
以通过条件在其他作业中检查它们。
解决方法 可以使用 outputs
或 artifacts
始终保存每个作业状态。
这里是一个示例,使用 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
将取决于您从其他作业获得的输出结果,是否执行操作。
您可以在以下链接中找到有关此示例的更多参考资料:
我这里也写了个例子:
在我的 GitHub 工作流程中,我有一项完成工作,即在所有其他工作完成后将覆盖率报告上传到 Coveralls。
jobs:
foo: ...
bar: ...
finish:
needs:
- foo
- bar
如果 foo
或 bar
失败,或者它被跳过(为什么一个作业可能被跳过与这个问题无关),finish
作业不会是 运行.
如果 至少 needs
字段中提供的其中一项工作是 finish
运行 =26=] 成功了吗?
目前无法在工作流中本地获取 job.status
或 job.conclusion
以通过条件在其他作业中检查它们。
解决方法 可以使用 outputs
或 artifacts
始终保存每个作业状态。
这里是一个示例,使用 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
将取决于您从其他作业获得的输出结果,是否执行操作。
您可以在以下链接中找到有关此示例的更多参考资料:
我这里也写了个例子: