当前位置: 首页 > 面试题库 >

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

陈畅
2023-03-14
问题内容

我正在尝试使用Rundeck构建,启动和链接一组Docker容器。简而言之(对于不熟悉docker的用户),启动映像时,它将返回容器ID。我想在启动后续作业时使用此html" target="_blank">容器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”命令,因此捕获此类输出并通过一组相关操作进行输出的用途有很多。这不仅仅与启动/链接容器有关。


问题答案:

没有直接的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。



 类似资料:
  • 我对Spring批处理框架相当陌生。 我在一个作业中创建了两个步骤(我们称之为步骤1和步骤2)。我想把它们并行运行。不仅如此,step2的IteamReader还应该使用step1的itemwriter。 我的第一个问题是,在Spring批量中是否有可能做到这一点?如果是,怎么做? 其次,如果这不可能,还有什么工作可以做呢? 谢了。

  • 我想在每个步骤之前和之后执行一些操作(而不是场景)。用cucumber怎么做? 就像jUnit中的后和前。 **我正在使用java。

  • null 如果生成错误(文件不一致,文件不存在...),则不能执行 仅供参考,我使用的是没有XML配置的Spring批处理!只有注释:下面是我的作业配置类的样子:

  • 我设置了以下测试用例: 我想使用Groovy脚本测试步骤获得SoapRequest测试步骤的状态。 它可以如下所示完成: 但是我不想通过脚本运行TestStep,而只是使用soapui testrunner。在datasink测试步骤中,我可以使用这个: 不幸的是,上述方法在GroovyScript TestStep中不起作用 有什么想法吗?

  • 我需要自动化一些web服务,为此我创建了一些方法,我想用Cucumber来实现,但是我不知道如何在下一步使用返回值。 所以,我有这个功能: 我有这个步骤: 有什么方法可以一步到另一步使用返回的值? 谢谢大家!

  • 问题内容: 是否可以创建具有可选输入阶段的Jenkins管道? 以下代码段未实现此目标。 预期行为 该阶段(以及输入提示)仅应针对特定分支运行。 实际行为 此阶段适用于所有分支。使用输入步骤时,将忽略when过滤器。 问题答案: 过滤器不会被忽略,它只是在输入步骤之后进行评估。在您的示例中,将始终询问您是否进行部署,并且如果您不在QA分支上,则什么也不会发生。 现在您可以问为什么詹金斯不首先评估“