Jenkins调用Rundeck作业后,如何将脚本变量纳入HTTP响应内容
让Rundeck脚本变量返回至Jenkins响应的方法
要让Rundeck脚本中的变量出现在Jenkins调用的response.content里,需要从Rundeck脚本输出、作业配置以及Jenkins后续API调用三方面处理:
1. 在Rundeck脚本中主动输出变量
Rundeck会捕获脚本的标准输出(stdout)作为执行结果的一部分,因此你需要在脚本里显式输出目标变量。推荐用JSON格式输出,方便Jenkins后续解析:
# 示例:Rundeck脚本中的变量与输出 target_var="要返回给Jenkins的内容" # 输出结构化JSON echo "{\"target_variable\": \"$target_var\"}"
2. 配置Rundeck作业保留执行日志
进入Rundeck作业编辑页面,找到「执行选项」相关配置:
- 确认开启「保留执行日志」选项
- 确保API调用有权限读取执行日志内容(检查API密钥的权限范围)
3. 在Jenkins中获取Rundeck执行输出
初始的API调用仅返回作业启动信息,需要通过执行ID进一步获取脚本输出:
- 从首次调用的
json_resp中提取执行ID(executionId) - 调用Rundeck的执行输出API(API版本根据你的Rundeck实例调整)
- 解析返回内容得到脚本输出的变量值
补充后的Jenkins代码示例:
// 初始调用启动Rundeck作业并获取执行ID def json_resp = readJSON text: response.content def executionId = json_resp.id // 调用API获取执行输出 def outputResp = httpRequest(url: "${rundeck_base_url}/api/36/executions/${executionId}/output", httpMode: 'GET', customHeaders: rundeckHeaders) // 解析输出(假设脚本输出JSON格式) def outputData = readJSON text: outputResp.content def targetValue = outputData.entries.collect { it.log }.find { it.contains('target_variable') }
关键注意点
- 若Rundeck作业是异步执行,需先轮询作业状态,待作业完成后再获取输出
- 确保Jenkins使用的Rundeck API密钥拥有
read级别的执行权限 - 脚本输出尽量结构化(如JSON),避免纯文本解析的复杂度
内容的提问来源于stack exchange,提问作者adsouza
相关产品推荐
相关产品推荐

