Rundeck Community 如何实现跨Job的变量/参数传递
Rundeck 跨Job捕获子脚本变量的实现方法
Rundeck 中子Job内联脚本里定义的普通Shell变量属于脚本进程的本地变量,会随脚本执行结束、会话销毁直接清除,无法被父Job直接读取,必须通过Rundeck原生的全局变量传递机制实现,具体操作步骤如下:
方案1:全版本通用的日志捕获法
- 第一步:修改Job1的内联脚本,在原有逻辑基础上,输出符合Rundeck变量识别规则的日志行,格式为
RD_VAR_<变量名>:<变量值>,Rundeck运行时会自动识别这类日志,将其注册为可跨上下文传递的变量:
#!/bin/bash ABC="xyz" echo "ABC=$ABC" # 新增导出变量的日志输出行 echo "RD_VAR_ABC:${ABC}"
若使用3.0以前的老版本Rundeck,需要给Job1添加一个「Key/Value Data」类型的日志过滤器,匹配规则设置为
^(RD_VAR_.*):(.*)$,即可自动捕获对应格式的变量。
- 第二步:在Job2中添加调用Job1的「Job Reference」步骤时,找到配置项里的将子Job导出变量传递到父Job上下文(不同版本中文译法略有差异,英文对应选项为
Export variables from the job to the parent job),勾选开启该选项。 - 第三步:在Job2的后续内联脚本步骤中,直接通过
$ABC即可读取到变量值,示例脚本:
#!/bin/bash echo "捕获到Job1的ABC变量值为:$ABC"
方案2:3.4+版本可用的rd-set工具法
如果你的Rundeck版本在3.4及以上,可以直接用内置的rd-set命令注册全局变量,不需要额外配置日志过滤器,稳定性更高:
- Job1内联脚本修改为:
#!/bin/bash ABC="xyz" echo "ABC=$ABC" # 直接调用内置命令注册输出变量 rd-set ABC "$ABC"
- 后续Job Reference的配置、Job2的变量读取逻辑和方案1完全一致。
常见避坑提示
- 不要尝试直接在Job1里用
export ABC=xyz传递变量:子Job脚本运行在独立的Shell会话中,普通环境变量不会跨会话透传。 - 如果读取不到变量,先查看Job1的执行日志,确认变量导出的日志/rd-set命令已经正常执行,再检查Job Reference步骤的变量导出开关是否勾选。
内容的提问来源于stack exchange,提问作者Nurul Akther
相关产品推荐
相关产品推荐

