一尘不染

如何捕获一个Rundeck步骤的输出以在以后的步骤中使用?

docker

我正在尝试使用Rundeck构建,启动和链接一组Docker容器。简而言之(对于不熟悉docker的用户),启动映像时,它将返回容器ID。我想在启动后续作业时使用此容器ID。

从命令行运行时,它看起来像这样(仅示例!):

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

(请注意在第二个命令行中使用第一个返回值)

此时,将有两个容器在运行。第二个将通过该--link选项链接到第一个,并且可使用第二个容器内部的主机名 host1
对其进行寻址。公平地说,泊坞窗生成(或可以给定)特定的容器名称,该名称可以代替容器ID使用。我宁愿使用容器ID来避免必须创建/跟踪唯一名称的麻烦。

我希望能够捕获第一个命令的输出(容器ID),以便可以在第二个命令中重用它。这可能吗?

编辑:这些图像将在“ docker build”(它也会输出我想包含在我的链中的相似ID)之后立即用于测试,并且可能紧随其后的是“ docker
rm”和“ docker rmi”命令,因此捕获此类输出并通过一组相关操作进行输出的用途有很多。这不仅仅与启动/链接容器有关。


阅读 194

收藏
2020-06-17

共1个答案

一尘不染

没有直接的Rundeck实施允许您将一个作业的输出传递给另一个作业作为输入,但是我过去尝试过一些工作,现在我选择了第二种方法。

1.使用文件传递数据

  1. 将ID /输出保存到第一个作业的tmp文件中
  2. 第二份工作读了那个文件

由于您依赖文件,因此可能会出错,但是好的代码可以改善。

2.使用Rundeck CLI从另一个作业调用两个作业

这是我正在使用的方法。

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。

2020-06-17