Как мне получить выходные данные из одного шага Rundeck, чтобы использовать их на следующем шаге?

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

При запуске из командной строки это будет выглядеть примерно так (только пример!):

# docker run -Pd 23ABCD45
34DEF123
# docker run -Pd --link 34DEF123:host1 ABC123EF
321CB456

(обратите внимание на использование первого возвращаемого значения во второй командной строке)

На этом этапе будут работать два контейнера. Второй будет связан с первым --link вариант, и он будет адресован с помощью имени хоста host1 из второго контейнера. Чтобы быть справедливым, Docker генерирует (или может быть дано) конкретное имя контейнера, которое можно использовать вместо идентификатора контейнера. Я бы предпочел использовать идентификатор контейнера, чтобы избежать необходимости создавать / отслеживать уникальные имена.

Я хотел бы иметь возможность захватить вывод первой команды (идентификатор контейнера), чтобы его можно было повторно использовать во второй команде. Это возможно?

Редактировать: Эти изображения используются для тестирования сразу после "сборки докера" (которая также выводит аналогичный идентификатор, который я хотел бы включить в мою цепочку) и может сопровождаться командами "docker rm" и "docker rmi", поэтому Есть ряд применений для захвата этого типа выходных данных и проведения его через связанный набор операций. Это не только запуск / связывание контейнеров.

1 ответ

Решение

Не существует прямой реализации Rundeck, которая позволяла бы передавать выходные данные с одного задания на другое в качестве входных данных, но есть обходные пути, которые я пробовал в прошлом, и я остановился на втором подходе.

1. Используйте файл для передачи данных

  1. Сохраните ID/ вывод в файл tmp в первом задании
  2. Вторая работа прочитать этот файл

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

2. Вызовите два задания с помощью CLI Rundeck из другого задания.

Это подход, который я использую.

JobA распечатывает два случайных числа.

echo $RANDOM;echo $RANDOM

JobB распечатывает второе случайное число, произведенное из JobA, которое передается как опция "число"

echo "$RD_OPTION_NUMBER is the number JobB received"

JobC вызывает первую работу, сохраняет последнюю строку в переменную и передает ее в JobB

#!/bin/bash
OUTPUT_FROM_JOB_A=`run -f --id <ID of JobA> | tail -n 1`
run -f --id <ID of JobB> -- -number $OUTPUT_FROM_JOB_A

Выход:

[5394] execution status: succeeded
Job execution started:
[5395] JobB <https://hostname:4443/project/Project/execution/show/5395>
6186 is the number JobB received
[5395] execution status: succeeded

Это просто примитивный пример кода. Вы можете сделать много с подпроцессом Python или просто использовать Bash.

Другие вопросы по тегам