You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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进一步获取脚本输出:

  1. 从首次调用的json_resp中提取执行ID(executionId)
  2. 调用Rundeck的执行输出API(API版本根据你的Rundeck实例调整)
  3. 解析返回内容得到脚本输出的变量值

补充后的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 18:40:45