如何捕获一个 Rundeck 步骤的输出以用于后面的步骤?
How do I capture output from one Rundeck step to be used in a later step?
我正在尝试使用 Rundeck 构建、启动和 link 一组 docker 容器。简而言之(对于那些不熟悉 docker 的人),启动图像时,它 return 是一个容器 ID。我想在后续作业的启动中使用这个容器ID。
当从命令行 运行 时,它看起来像这样(仅作为示例!!):
# docker run -Pd 23ABCD45
34DEF123
# docker run -Pd --link 34DEF123:host1 ABC123EF
321CB456
(注意在第二个命令行中使用第一个 return 值)
此时,会有两个容器运行ning。第二个将通过 --link
选项 linked 到第一个,并且可以使用第二个容器内部的主机名 host1 对其进行寻址。公平地说,docker 生成(或可能给出)一个特定的容器名称,可以用来代替容器 ID。我宁愿使用容器 ID 来避免必须 create/track 唯一名称的麻烦。
我希望能够捕获第一个命令的输出(容器 ID),以便它可以在第二个命令中重复使用。这可能吗?
Edit: These images are being used for testing immediately following a
"docker build" (which also outputs a similar ID I would like to
include in my chain) and might be followed by "docker rm" and "docker
rmi" commands, so there are a number of uses for capturing this type
of output and carrying it through a related set of operations. This
is not just about launching/linking containers.
没有直接的 Rundeck 实现允许您将一个作业的输出作为输入传递给另一个作业,但是我过去尝试过一些解决方法,并且我已经选择了第二种方法。
1。使用文件传递数据
- 在第一个作业中将 ID/output 保存到 tmp 文件中
- 第二份工作读取该文件
由于您依赖文件,因此可能会出错,但好的代码可以改进。
2。使用 Rundeck CLI 从另一个作业调用两个作业
这是我正在使用的方法。
JobA打印出两个随机数。
echo $RANDOM;echo $RANDOM
JobB 打印出从 JobA 生成的第二个随机数,它作为选项传递 "number"
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.
我正在尝试使用 Rundeck 构建、启动和 link 一组 docker 容器。简而言之(对于那些不熟悉 docker 的人),启动图像时,它 return 是一个容器 ID。我想在后续作业的启动中使用这个容器ID。
当从命令行 运行 时,它看起来像这样(仅作为示例!!):
# docker run -Pd 23ABCD45
34DEF123
# docker run -Pd --link 34DEF123:host1 ABC123EF
321CB456
(注意在第二个命令行中使用第一个 return 值)
此时,会有两个容器运行ning。第二个将通过 --link
选项 linked 到第一个,并且可以使用第二个容器内部的主机名 host1 对其进行寻址。公平地说,docker 生成(或可能给出)一个特定的容器名称,可以用来代替容器 ID。我宁愿使用容器 ID 来避免必须 create/track 唯一名称的麻烦。
我希望能够捕获第一个命令的输出(容器 ID),以便它可以在第二个命令中重复使用。这可能吗?
Edit: These images are being used for testing immediately following a "docker build" (which also outputs a similar ID I would like to include in my chain) and might be followed by "docker rm" and "docker rmi" commands, so there are a number of uses for capturing this type of output and carrying it through a related set of operations. This is not just about launching/linking containers.
没有直接的 Rundeck 实现允许您将一个作业的输出作为输入传递给另一个作业,但是我过去尝试过一些解决方法,并且我已经选择了第二种方法。
1。使用文件传递数据
- 在第一个作业中将 ID/output 保存到 tmp 文件中
- 第二份工作读取该文件
由于您依赖文件,因此可能会出错,但好的代码可以改进。
2。使用 Rundeck CLI 从另一个作业调用两个作业
这是我正在使用的方法。
JobA打印出两个随机数。
echo $RANDOM;echo $RANDOM
JobB 打印出从 JobA 生成的第二个随机数,它作为选项传递 "number"
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.