3

我想在 rundeck 作业步骤中共享一个变量。

  1. 初始化作业选项“target_files”
  2. 在步骤 1 中设置变量。

    RD_OPTION_TARGET_FILES=some bash command
    echo $RD_OPTION_TARGET_FILES
    该值在此处打印。

  3. 从步骤 2 中读取变量。
    echo $RD_OPTION_TARGET_FILES

步骤 3 无法识别步骤 1 中设置的变量
。除了使用环境变量之外,在 rundeck 上执行此操作的好方法是什么?

4

3 回答 3

6

RUNDECK 2.9+ 的详细过程:

1)设置值 - 三种方法:

1.a) 使用“全局变量”工作流程步骤类型,例如填写:Group:="export", Name:="varOne", Value:="hello"

1.b)向工作流添加一个“全局日志过滤器”(此处“Amos”引用的数据捕获插件),它采用在作业步骤日志输出上评估的正则表达式。例如,使用以下作业步骤命令:

   echo "CaptureThis:varTwo=world"

和一个全局日志过滤器模式,如:

   "CaptureThis:(.*?)=(.*)" 

(除非您在模式中提供单个捕获组,否则不需要“名称数据”字段)

1.c) 使用工作流数据步骤明确定义多个变量。示例内容:

varThree=foo
varFour=bar

2)取回值:

您必须在命令字符串和参数中使用语法 ${ctx.name},并在 INLINE 脚本中使用 @ctx.name@。在我们的示例中,使用作业步骤命令或内联脚本行,例如:

echo "values : @export.varOne@, @data.varTwo@, @stub.varThree@, @stub.varFour@"

您将回显这四个值。

对于方法 1.b,上下文是隐含的“数据”,对于方法 1.c,上下文是“存根”。

请注意,数据步骤非常有限!它只允许从内联脚本中的@stub.name@ 符号中受益。值替换不在远程文件中执行,并且像 ${stub.name} 这样的符号在作业步骤命令字符串或参数中不可用。

于 2018-11-09T15:23:47.670 回答
4

在 Rundeck 2.9 之后,有一个Data Capture Plugin允许在作业步骤之间传递数据。

该插件默认包含在 Rundeck 应用程序中。

用于匹配步骤日志输出中的正则表达式并将值传递给后续步骤的数据捕获插件

详细信息请参阅步骤之间的数据捕获/数据传递(发布时间:2017 年 8 月 3 日)

于 2017-09-20T07:59:04.983 回答
2

除了 1 之外,作业内联脚本中几乎没有其他方法,将值导出到 env 或 2,在第 1 步将值写入第 3 个文件,第 2 步从那里读取它。

如果您使用的是“脚本文件或 URL”方法,您可能可以在 script1 中执行 step2 脚本作为解决方法.. 像

Script1
#!/bin/bash
. ./script2

在上述情况下,script2 将在与 script1 相同的会话中执行,因此保留了变量和值。

编辑 早些时候没有这样的选项,但后来有可用的插件。因此检查阿莫斯的答案。

于 2016-05-12T14:17:26.407 回答