Rundeck跨作业步骤共享变量

时间:2016-05-09 07:40:53

标签: bash variables rundeck

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

  1. 初始化作业选项" target_files"
  2. 在STEP 1上设置变量。

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

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

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

3 个答案:

答案 0 :(得分:4)

在Rundeck 2.9之后,有一个数据捕获插件,允许在作业步骤之间传递数据。

默认情况下,插件包含在Rundeck应用程序中。

  

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

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

答案 1 :(得分:3)

RUNDECK 2.9+中的详细过程:

1)设置值-三种方法:

1.a)使用“全局变量”工作流步骤类型 例如填写:组:=“导出”,名称:=“ varOne”,值:=“ 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}之类的符号在作业步骤命令字符串或参数中不可用。

答案 2 :(得分:2)

除了1以外,作业内联脚本几乎没有办法,将值导出到env或2,在第1步将值写入第3个文件,从第1个步骤读取值。

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

Script1
#!/bin/bash
. ./script2

在上面的例子中,script2将在与script1相同的会话中执行,因此保留了变量和值。

修改 早些时候没有这样的选择,但后来有可用的插件。因此,请检查 Amos的答案。