Rundeck 跨作业步骤共享变量

Rundeck sharing variables across job steps

我想在 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 步中设置的变量。
除了使用环境变量之外,在跑台上执行此操作的好方法是什么?

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

如果您使用的是 "Scriptfile or URL" 方法,也许您可​​以在 script1 中执行 step2 脚本作为变通方法。例如

Script1
#!/bin/bash
. ./script2

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

编辑 早些时候没有这样的选项,但后来有可用的插件。因此请查看 Amos 的回答。

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

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

Data capture plugin to match a regular expression in a step’s log output and pass the values to later steps

详情见Data Capture/Data Passing between steps(发布时间:2017 年 8 月 3 日)

RUNDECK 2.9+的详细流程:

1)设置值-三种方法:

1.a) 使用 "global variable" 工作流步骤类型 例如填写:Group:="export", Name:="varOne", Value:="hello"

1.b) 将 "global log filter"('Amos' 此处引用的数据捕获插件)添加到工作流中,它采用根据作业步骤日志输出评估的正则表达式。例如,使用作业步骤命令,如:

   echo "CaptureThis:varTwo=world"

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

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

('Name Data' 字段不需要,除非您在模式中提供单个捕获组)

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

varThree=foo
varFour=bar

2) 取回值:

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

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

您将回应这四个值。

方法 1.b 的上下文是隐式的 'data',方法 1.c 的上下文是 'stub'。

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