问题描述
想象一下,我有一个包含 5 个步骤的工作流程。
步骤 2 可能会也可能不会创建一个文件作为其输出(然后用作后续步骤的输入)。
- 如果文件已创建,我想运行后续步骤。
- 如果在第 2 步中没有创建文件,我想将工作流标记为已完成,而不执行第 3 步到第 5 步。
我确信一定有一种简单的方法可以做到这一点,但我不知道如何去做。
我尝试在没有创建文件时使第 2 步返回非零退出代码,然后使用
when: "{{steps.step2.outputs.exitCode}} == 0"
在第 3 步,但仍然执行第 4 步和第 5 步(更不用说将第 2 步标记为“失败”)
所以我没有想法,非常感谢任何建议。
解决方法
默认情况下,以非零退出代码退出的步骤会导致工作流失败。
我建议编写一个 output parameter 来确定工作流是否应该继续。
- name: yourstep
container:
command: [sh,-c]
args: ["yourcommand; if [ -f /tmp/yourfile ]; then echo continue > /tmp/continue; fi"]
outputs:
parameters:
- name: continue
valueFrom:
default: "stop"
path: /tmp/continue
或者,您可以将 override the fail-on-nonzero-exitcode behavior 与 continueOn
。
continueOn:
failed: true
我对 continueOn.failed: true
持谨慎态度。如果您的命令出于意外原因抛出非零退出代码,则工作流程不会像应有的那样失败,并且该错误可能不会被注意到。