【问题标题】:Job Conditional Reports Previous Job "Never Run"作业条件报告以前的作业“从不运行”
【发布时间】:2020-06-14 17:25:48
【问题描述】:

我有一个将其他作业称为主运行文件的作业。我执行了初步检查,在管理服务器上设置了一些值,我必须确保我不会因为正在运行更新而收到任何错误警报。

初步作业执行良好,但紧随其后的条件总是输出以下状态:

{{UUID}} is NOT RUNNING AND previously NEVER. Expected NOT RUNNING AND 'Succeeded'

无论我做什么,我都无法确定是我做错了什么,或者我只是配置错误,还是条件句被破坏了。这是我的 homelab 大约 10 台服务器的小型安装,所以我使用默认数据库后端运行,而不是 MySQL 或其他东西,所以我不知道这是否是一个问题。

我的 Rundeck 详细信息

Rundeck version: Rundeck 3.2.8-20200608
Install type: deb
OS Name/version: Ubuntu 18.04
DB Type/version: H2? (whatever the default is)

【问题讨论】:

    标签: rundeck


    【解决方案1】:

    验证作业状态条件期望,我在 3.2.8 上留下一个有效的示例。基本上,Job Step Conditional 期望另一个作业最后执行成功,任何不同都会使条件失败。

    HelloWorld 工作:

    <joblist>
      <job>
        <defaultTab>nodes</defaultTab>
        <description></description>
        <executionEnabled>true</executionEnabled>
        <group>test1</group>
        <id>0bdd6fe5-addb-4051-b072-bb4430130a80</id>
        <loglevel>INFO</loglevel>
        <name>HelloWorld</name>
        <nodeFilterEditable>false</nodeFilterEditable>
        <plugins />
        <scheduleEnabled>true</scheduleEnabled>
        <sequence keepgoing='false' strategy='node-first'>
          <command>
            <exec>echo "hello world"</exec>
          </command>
        </sequence>
        <uuid>0bdd6fe5-addb-4051-b072-bb4430130a80</uuid>
      </job>
    </joblist>
    

    CheckerJob(使用 Job Step Conditional step,期望 HelloWorld 作业成功执行):

    <joblist>
      <job>
        <defaultTab>nodes</defaultTab>
        <description></description>
        <executionEnabled>true</executionEnabled>
        <group>test1</group>
        <id>c6f2be75-81e8-4f8e-ba35-234d5c8a97d6</id>
        <loglevel>INFO</loglevel>
        <name>CheckerJob</name>
        <nodeFilterEditable>false</nodeFilterEditable>
        <plugins />
        <scheduleEnabled>true</scheduleEnabled>
        <sequence keepgoing='false' strategy='node-first'>
          <command>
            <exec>echo "starting..."</exec>
          </command>
          <command>
            <step-plugin type='job-state-conditional'>
              <configuration>
                <entry key='condition' value='Equals' />
                <entry key='executionState' value='Succeeded' />
                <entry key='fail' value='true' />
                <entry key='halt' value='true' />
                <entry key='jobName' value='test1/HelloWorld' />
                <entry key='jobProject' value='${job.project}' />
                <entry key='jobUUID' value='0bdd6fe5-addb-4051-b072-bb4430130a80' />
                <entry key='running' value='false' />
              </configuration>
            </step-plugin>
          </command>
        </sequence>
        <uuid>c6f2be75-81e8-4f8e-ba35-234d5c8a97d6</uuid>
      </job>
    </joblist>
    

    如果作业从未运行before

    如果作业运行before(作业状态条件期望)。

    另一种方式

    如果您想在同一个父作业中有条件地运行作业状态,您需要单独执行“子”作业,这样做的方法是“在外部”执行该作业(使用 RD-CLI 或 API,我举个例子):

    HelloWord:

    <joblist>
      <job>
        <defaultTab>nodes</defaultTab>
        <description></description>
        <executionEnabled>true</executionEnabled>
        <id>dd33434e-5b6e-40e1-88b0-e9b5b52a3801</id>
        <loglevel>INFO</loglevel>
        <name>HelloWorld</name>
        <nodeFilterEditable>false</nodeFilterEditable>
        <plugins />
        <scheduleEnabled>true</scheduleEnabled>
        <sequence keepgoing='false' strategy='node-first'>
          <command>
            <exec>echo "hello world!"</exec>
          </command>
        </sequence>
        <uuid>dd33434e-5b6e-40e1-88b0-e9b5b52a3801</uuid>
      </job>
    </joblist>
    

    CheckerFakeParentJob(执行 HelloWorld vi RD-CLI 并稍后评估该执行):

    <joblist>
      <job>
        <defaultTab>nodes</defaultTab>
        <description></description>
        <executionEnabled>true</executionEnabled>
        <id>a90ec790-b856-4f00-8b66-2f37da1d00cb</id>
        <loglevel>INFO</loglevel>
        <name>CheckerFakeParentJob</name>
        <nodeFilterEditable>false</nodeFilterEditable>
        <plugins />
        <scheduleEnabled>true</scheduleEnabled>
        <sequence keepgoing='false' strategy='node-first'>
          <command>
            <exec>echo "starting"</exec>
          </command>
          <command>
            <fileExtension>.sh</fileExtension>
            <script><![CDATA[# print a message
    echo "running HelloWorld job"
    
    # run the hello world job via RD-CLI to get the individual execution and evaluate later
    rd run -j HelloWorld -p ProjectEXAMPLE
    
    # some time depending of job
    sleep 3
    
    # print a message
    echo "done"]]></script>
            <scriptargs />
            <scriptinterpreter>/bin/bash</scriptinterpreter>
          </command>
          <command>
            <step-plugin type='job-state-conditional'>
              <configuration>
                <entry key='condition' value='Equals' />
                <entry key='executionState' value='Succeeded' />
                <entry key='fail' value='true' />
                <entry key='halt' value='true' />
                <entry key='jobUUID' value='dd33434e-5b6e-40e1-88b0-e9b5b52a3801' />
                <entry key='running' value='false' />
              </configuration>
            </step-plugin>
          </command>
        </sequence>
        <uuid>a90ec790-b856-4f00-8b66-2f37da1d00cb</uuid>
      </job>
    </joblist>
    

    结果here

    您有更多信息here

    编辑:如果您引用基于作业参考步骤的工作流,则必须采用父作业状态(即使子作业也是通过父作业执行的)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-08
      • 2012-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-01
      • 1970-01-01
      相关资源
      最近更新 更多