mel*_*kes 6 github github-actions
我有一个工作流程,可以执行一堆模糊测试,最后计算所有crashers子目录中的文件总数。后来,在另一项工作中,我使用该号码向 Slack 发送通知。但是,由于某种原因,::set-output不会产生任何输出,最重要的是,即使数量crashers不为零,下一个作业也不会运行!
jobs:
fuzz-nightly-test:
runs-on: ubuntu-latest
steps:
...
- name: Set crashers count
working-directory: test/fuzz
run: echo "::set-output name=crashers-count::$(find . -type d -name 'crashers' | xargs -I % sh -c 'ls % | wc -l' | awk '{total += $1} END {print total}')"
id: set-crashers-count
outputs:
crashers-count: ${{ steps.set-crashers-count.outputs.crashers-count }}
fuzz-nightly-fail:
needs: fuzz-nightly-test
if: ${{ needs.set-crashers-count.outputs.crashers-count != 0 }}
runs-on: ubuntu-latest
steps:
...
Run Code Online (Sandbox Code Playgroud)
有人知道我做错了什么吗?谢谢你!
jid*_*ula 16
我用一个类似的最小示例做了很多测试,我想我已经解决了这个问题。最直接的是,在你的工作if指令中fuzz-nightly-fail,你需要访问needs.<job_id>.outputs.<job_output_id>而不是needs.<step_id>.outputs.<job_output_id>. 因此,该if指令将变为if: ${{ needs.fuzz-nightly-test.outputs.crashers-count != 0 }}.
此外,您可能应该创建一个与作业输出 ID 不同的步骤输出 ID,以避免对在何处引用哪个上下文对象感到困惑。因此,run您的第一份工作中的语句可能类似于run: echo "::set-output name=count::$(find . -type d -name 'crashers' | xargs -I % sh -c 'ls % | wc -l' | awk '{total += $1} END {print total}')",并且工作输出也将更改为crashers-count: ${{ steps.set-crashers-count.outputs.count }}. 把这些放在一起,我们得到
jobs:
fuzz-nightly-test:
runs-on: ubuntu-latest
steps:
...
- name: Set crashers count
working-directory: test/fuzz
run: echo "::set-output name=count::$(find . -type d -name 'crashers' | xargs -I % sh -c 'ls % | wc -l' | awk '{total += $1} END {print total}')"
id: set-crashers-count
outputs:
crashers-count: ${{ steps.set-crashers-count.outputs.count }}
fuzz-nightly-fail:
needs: fuzz-nightly-test
if: ${{ needs.fuzz-nightly-test.outputs.crashers-count != 0 }}
runs-on: ubuntu-latest
steps:
...
Run Code Online (Sandbox Code Playgroud)
仅从文档来看,其原因并不是显而易见的,但这里的示例暗示它<step_id>.outputs.foo不同于<job_id>.outputs.foo-jobs.job1.outputs.output1被定义为该作业的steps.step1.outputs.test.
您可以在此处查看一个(非常)简单的示例,并在此处运行相应的工作流程。
| 归档时间: |
|
| 查看次数: |
10721 次 |
| 最近记录: |