Rundeck 2.5.1:主作业调用受控子作业时如何传递认证凭证?
在Rundeck 2.5.1中实现主作业调用带认证的子作业并传递输出输入
我来给你梳理下在Rundeck 2.5.1里实现这个需求的具体步骤——毕竟这个版本确实比较旧,得贴合它的特性来操作:
一、先搞定认证信息的传递
因为你的Rundeck实例有访问控制,主作业调用子作业时必须带上合法的认证信息,这里有两种靠谱的方式:
1. 使用API Token推荐
- 首先给主作业的执行用户生成一个API Token:在用户设置页面(右上角用户头像→Profile)里找到API Tokens选项,创建一个新的token,记得保存好。
- 把这个token存成Rundeck的安全变量:进入项目的Settings→Key Storage,添加一个名为
RD_API_TOKEN的变量,类型选Secure,避免明文泄露。 - 在主作业里调用子作业时,用
rd命令行工具带上token参数:rd run -t ${RD_API_TOKEN} -j "子作业名称" -p "你的项目名称"
2. 使用用户名密码备选
如果不想用token,也可以直接传用户名密码,但同样要存成安全变量:
rd run -u ${RD_USERNAME} -p ${RD_PASSWORD} -j "子作业名称" -p "你的项目名称"
这里的RD_USERNAME和RD_PASSWORD都是你提前存在Key Storage里的安全变量。
二、把子作业1的输出传给子作业2
要实现“一个作业输出作为另一个输入”,需要在主作业里先捕获第一个子作业的输出,再把它作为参数传给第二个子作业:
- 先确保子作业1的输出是容易提取的格式——比如单行的关键值,或者简单的JSON结构,避免复杂的多行混乱输出。
- 在主作业的命令步骤里,先捕获子作业1的输出:
# 用--raw参数获取子作业的原始输出,过滤掉rd工具本身的额外信息 FIRST_JOB_RESULT=$(rd run -t ${RD_API_TOKEN} -j "子作业1" -p "你的项目名称" --raw) - 然后把捕获到的变量作为参数传给子作业2:
# 假设子作业2有一个名为INPUT_FROM_JOB1的参数用来接收输入 rd run -t ${RD_API_TOKEN} -j "子作业2" -p "你的项目名称" -P "INPUT_FROM_JOB1=${FIRST_JOB_RESULT}"
三、主作业的配置注意事项
- 确保主作业的执行用户有足够权限:不仅能读取你创建的安全变量,还要有调用两个子作业的
run权限(在Access Control策略里配置)。 - 如果子作业1的输出包含空格、换行或特殊字符,记得用双引号包裹变量,避免参数解析错误:
rd run -t ${RD_API_TOKEN} -j "子作业2" -p "你的项目名称" -P "INPUT_FROM_JOB1=\"${FIRST_JOB_RESULT}\"" - 测试时可以先单独运行子作业,确认它们的输出和参数接收都正常,再整合到主作业里。
内容的提问来源于stack exchange,提问作者neves
相关产品推荐
相关产品推荐

