问题描述
默认错误处理程序以某种方式工作,如果任何作业序列不以非零状态结束,它就会进入错误处理程序流程。
我想实现流程,如果API端点返回204,我需要执行一些依赖操作。
我正在考虑使用错误处理程序来执行此操作,但我如何处理返回状态 204,因为它仅处理错误处理程序中的非零状态流。
解决方法
在 Rundeck Enterprise 上,您可以使用规则集策略(例如,捕获退出代码并将其放在数据选项上以决定是否运行其他作业),查看 this。
在社区版本上,您可以编写脚本,按以下方式管理脚本步骤的行为(在我的示例中,我只想检测在选项上定义的 127 错误):
作业定义示例:
<joblist>
<job>
<context>
<options preserveOrder='true'>
<option name='code_to_catch' value='127' />
</options>
</context>
<defaultTab>nodes</defaultTab>
<description></description>
<executionEnabled>true</executionEnabled>
<id>ab58e8e3-78f8-4a60-b6fc-4ad1167aa3a4</id>
<loglevel>INFO</loglevel>
<name>HelloWorld</name>
<nodeFilterEditable>false</nodeFilterEditable>
<plugins />
<scheduleEnabled>true</scheduleEnabled>
<sequence keepgoing='false' strategy='node-first'>
<command>
<fileExtension>.sh</fileExtension>
<script><![CDATA[date-foo-bar # intentional error
mycode=$(printf '%d\n' $?)
case $mycode in
@option.code_to_catch@)
echo "Executing actions for @option.code_to_catch@ error"
## also,you can run any job using RD-CLI (https://rundeck.github.io/rundeck-cli/)
## or Rundeck API (https://docs.rundeck.com/docs/api/rundeck-api.html)
;;
0)
echo "all ok!"
exit 0
;;
esac
]]></script>
<scriptargs />
<scriptinterpreter>/bin/bash</scriptinterpreter>
</command>
</sequence>
<uuid>ab58e8e3-78f8-4a60-b6fc-4ad1167aa3a4</uuid>
</job>
</joblist>
如您所见,您可以使用内联脚本捕获错误代码,然后根据需要使用 RD-CLI 运行另一个作业。