Rundeck - 带有错误处理程序的流程执行

问题描述

错误处理程序以某种方式工作,如果任何作业序列不以非零状态结束,它就会进入错误处理程序流程。

我想实现流程,如果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 运行另一个作业。