scheduled-tasks - rundeck 开源有没有办法在失败的工作流步骤中触发作业?
问题描述
我们是否有任何插件或者有什么方法可以让作业在失败的工作流程步骤中恢复执行?
如果我的工作 1 和工作 2 通过了,那么工作 3 必须触发。如果工作 1 通过并且工作 2 失败,当我们为工作 2 修复它并手动触发它时,如果它通过了,那么工作 3 应该知道作业 2 获得通过,作业 1 先前状态已通过。然后作业 3 应自动触发。我们是否有任何插件或方法可以为 rundeck 开源做到这一点?
解决方案
最好的方法是在您的步骤上附加一个错误处理程序(在您的情况下是作业参考步骤),该错误处理程序调用另一个作业,我留下一个基本示例:
ParentJob
RemediationJob(如果任何作业引用通过错误处理程序失败,则必须调用的作业):
<joblist>
<job>
<defaultTab>nodes</defaultTab>
<description></description>
<executionEnabled>true</executionEnabled>
<id>67c56627-9dbd-4ad2-b6c1-04436ab3d0b2</id>
<loglevel>INFO</loglevel>
<name>RemediationJob</name>
<nodeFilterEditable>false</nodeFilterEditable>
<plugins />
<scheduleEnabled>true</scheduleEnabled>
<sequence keepgoing='false' strategy='node-first'>
<command>
<fileExtension>.sh</fileExtension>
<script><![CDATA[echo "fixing..."
echo "fixed! try run the job again"]]></script>
<scriptargs />
<scriptinterpreter>/bin/bash</scriptinterpreter>
</command>
</sequence>
<uuid>67c56627-9dbd-4ad2-b6c1-04436ab3d0b2</uuid>
</job>
</joblist>
工作A:
<joblist>
<job>
<defaultTab>nodes</defaultTab>
<description></description>
<executionEnabled>true</executionEnabled>
<id>5d19ea42-0431-4a68-a061-623f498222f6</id>
<loglevel>INFO</loglevel>
<name>ChildA</name>
<nodeFilterEditable>false</nodeFilterEditable>
<plugins />
<scheduleEnabled>true</scheduleEnabled>
<sequence keepgoing='false' strategy='node-first'>
<command>
<exec>echo "hi"</exec>
</command>
</sequence>
<uuid>5d19ea42-0431-4a68-a061-623f498222f6</uuid>
</job>
</joblist>
JobB(步骤中存在故意错误):
<joblist>
<job>
<defaultTab>nodes</defaultTab>
<description></description>
<executionEnabled>true</executionEnabled>
<id>00f5aaa5-5726-4f65-86a3-2a3c404bff08</id>
<loglevel>INFO</loglevel>
<name>ChildB</name>
<nodeFilterEditable>false</nodeFilterEditable>
<plugins />
<scheduleEnabled>true</scheduleEnabled>
<sequence keepgoing='false' strategy='node-first'>
<command>
<exec>eco "hi"</exec>
</command>
</sequence>
<uuid>00f5aaa5-5726-4f65-86a3-2a3c404bff08</uuid>
</job>
</joblist>
ParentJob(调用 JobA 和 JobB 并在任何作业参考步骤中使用错误处理程序)
<joblist>
<job>
<defaultTab>nodes</defaultTab>
<description></description>
<executionEnabled>true</executionEnabled>
<id>c2e0a05e-4fdd-4c33-9b4e-c9109d3667c6</id>
<loglevel>INFO</loglevel>
<name>ParentJob</name>
<nodeFilterEditable>false</nodeFilterEditable>
<plugins />
<scheduleEnabled>true</scheduleEnabled>
<sequence keepgoing='false' strategy='node-first'>
<command>
<errorhandler>
<jobref name='RemediationJob' nodeStep='true'>
<uuid>67c56627-9dbd-4ad2-b6c1-04436ab3d0b2</uuid>
</jobref>
</errorhandler>
<jobref name='ChildA' nodeStep='true'>
<uuid>5d19ea42-0431-4a68-a061-623f498222f6</uuid>
</jobref>
</command>
<command>
<errorhandler>
<jobref name='RemediationJob' nodeStep='true'>
<uuid>67c56627-9dbd-4ad2-b6c1-04436ab3d0b2</uuid>
</jobref>
</errorhandler>
<jobref name='ChildB' nodeStep='true'>
<uuid>00f5aaa5-5726-4f65-86a3-2a3c404bff08</uuid>
</jobref>
</command>
</sequence>
<uuid>c2e0a05e-4fdd-4c33-9b4e-c9109d3667c6</uuid>
</job>
</joblist>
在此示例中,第二个作业引用总是故意失败,这样您就可以看到如果步骤(在您的情况下为作业引用步骤)失败,如何触发另一个作业。
推荐阅读
- mysql - 如何在 Ubuntu 16.04 中我选择的驱动器中导入 mysql 数据库?
- c - (3* - *p/(*q)+7) = 6 它是如何工作的?
- java - Spring Boot JPA 在 2.0.6.RELEASE 中工作,但 2.1.1.RELEASE 不适用于相同的 pom.xml
- javascript - 使用 initializeUnorderedBulkOp() mongoose 批量查找
- node.js - 带有 Node.js、集群和 Socket.IO 的 HTML5 画布
- sql - 添加列时,我必须创建和删除而不是更改?
- javascript - 如何仅使用带有填充和特定邮政编码的邮政编码覆盖?
- matlab - 使用堆积条形图获取图例
- sql - 如何匹配oracle中2个列表中的值?
- java - 如果不匹配,Powermockito whenNew 返回 null