Rundeck Job Reference - Использование переменной в качестве имени задания - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь собрать систему, которая потребует выполнения нескольких заданий с переменным числом узлов в переменном порядке с возможностью дублирования.

Я пытаюсь решить эту проблему с помощью одного задание для каждого узла (обратите внимание, что каждый узел также выполняет разные задания), а затем решение о том, какое задание выполняется, определяется во время выполнения.

Но при запуске задания я получаю:

"2: Workflow step executing: JobReferenceItem{label='Step 1 job, jobIdentifier='${data.DEPLOY_SYSTEM_1}', nodeStep=true}"

Кажется, переменная не расширяется. Разве это невозможно или я могу ошибаться? Я не смог найти никакой информации об использовании переменных, чтобы динамически выбирать, какое задание будет запущено

Любая помощь приветствуется. Спасибо

1 Ответ

0 голосов
/ 29 апреля 2020

Вы правы, я тестировал вызов с использованием переменных данных и параметров на шаге задания задания и не работает:

<joblist>
  <job>
    <defaultTab>nodes</defaultTab>
    <description></description>
    <executionEnabled>true</executionEnabled>
    <id>97979d11-6ff8-45ef-9843-8b90e4e135d1</id>
    <loglevel>INFO</loglevel>
    <name>JobONE</name>
    <nodeFilterEditable>false</nodeFilterEditable>
    <plugins />
    <scheduleEnabled>true</scheduleEnabled>
    <sequence keepgoing='false' strategy='node-first'>
      <command>
        <exec>echo "MYJOB=JobTWO"</exec>
        <plugins>
          <LogFilter type='key-value-data'>
            <config>
              <logData>true</logData>
              <regex>^(MYJOB)\s*=\s*(.+)$</regex>
            </config>
          </LogFilter>
        </plugins>
      </command>
      <command>
        <exec>echo ${data.MYJOB}</exec>
      </command>
      <command>
        <jobref name='${data.MYJOB}' nodeStep='true'>
          <useName>true</useName>
        </jobref>
      </command>
    </sequence>
    <uuid>97979d11-6ff8-45ef-9843-8b90e4e135d1</uuid>
  </job>
</joblist>

Хороший обходной путь - встраивание команды RD CLI чтобы вызвать задание (используя данные или опцию) на шаге встроенного сценария, например:

<joblist>
  <job>
    <defaultTab>nodes</defaultTab>
    <description></description>
    <executionEnabled>true</executionEnabled>
    <id>97979d11-6ff8-45ef-9843-8b90e4e135d1</id>
    <loglevel>INFO</loglevel>
    <name>JobONE</name>
    <nodeFilterEditable>false</nodeFilterEditable>
    <plugins />
    <scheduleEnabled>true</scheduleEnabled>
    <sequence keepgoing='false' strategy='node-first'>
      <command>
        <exec>echo "MYJOB=JobTWO"</exec>
        <plugins>
          <LogFilter type='key-value-data'>
            <config>
              <logData>true</logData>
              <regex>^(MYJOB)\s*=\s*(.+)$</regex>
            </config>
          </LogFilter>
        </plugins>
      </command>
      <command>
        <exec>echo ${data.MYJOB}</exec>
      </command>
      <command>
        <script><![CDATA[# call another job, more info: rd run help
rd run -j @data.MYJOB@ -p ProjectLOCAL]]></script>
        <scriptargs />
      </command>
    </sequence>
    <uuid>97979d11-6ff8-45ef-9843-8b90e4e135d1</uuid>
  </job>
</joblist>

Используя Ruleset (только для Rundeck Enterprise), вы можете выбрать способ, в зависимости от значения некоторой переменной, взять look .

Также вы можете предложить эту проблему в официальном пространстве GitHub .

...