如何捕获一个Rundeck步骤的输出以用于后续步骤?

时间:2016-10-04 19:17:07

标签: docker rundeck

我正在尝试使用Rundeck构建,启动和链接一组docker容器。简而言之(对于那些不熟悉docker的人),当启动图像时,它会返回一个容器ID。我想在启动后续工作时使用此容器ID。

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

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

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

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

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

  

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

1 个答案:

答案 0 :(得分:4)

没有直接的Rundeck实现允许您将输出从一个作业传递到另一个作业作为输入,但是我已经尝试了过去的工作,并且我已经确定了第二种方法。

1。使用文件传递数据

  1. 将ID /输出保存到第一个作业的tmp文件中
  2. 第二份工作读取该文件
  3. 由于您依赖文件,可能会出现问题,但良好的代码可以改进。

    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。