如何使用Groovy获取Jenkins文件夹下非当前构建的其他任务描述
问题根因
jenkins.model.Jenkins.instance.getItem() 仅支持检索Jenkins根目录下的任务,嵌套在文件夹中的任务无法通过直接传入任务名称获取,所以你会拿到null对象。
解决方案
方法1:通过全路径直接检索(推荐)
调用getItemByFullName接口传入目标任务的完整路径即可,路径使用/分隔层级,不需要带URL中的job/前缀,示例代码如下:
// 替换为你的目标任务全路径,格式为 父文件夹名/子文件夹名/任务名 def targetJobPath = "FOLDERJOBS/JOB_TO_BE_EXTRACTED" def targetJob = jenkins.model.Jenkins.instance.getItemByFullName(targetJobPath) // 空值判断避免空指针 if (!targetJob) { println "未找到目标任务,请检查路径或运行权限" return } def lastBuild = targetJob.lastBuild if (!lastBuild) { println "目标任务暂无构建记录" return } // 若要获取Jenkins原生的构建描述字段,使用以下代码 def sysBuildDesc = lastBuild.description println "系统构建描述:${sysBuildDesc}" // 若要获取构建变量中自定义的Description参数,使用以下代码 def customDesc = lastBuild.getBuildVariables().get("Description") println "自定义Description变量:${customDesc}"
方法2:逐级查找文件夹
如果任务嵌套在多层文件夹中,也可以逐层检索避免路径写错:
// 先获取一级文件夹 def folder = jenkins.model.Jenkins.instance.getItem("FOLDERJOBS") // 从文件夹中获取目标任务 def targetJob = folder.getItem("JOB_TO_BE_EXTRACTED") // 后续获取构建信息的逻辑与方法1一致
常见排查点
- 路径格式错误:全路径不要包含URL中的
job/字段,层级之间使用/分隔 - 权限不足:脚本运行的身份需要有目标任务的读取权限,否则接口也会返回null
- 脚本未审批:在流水线中运行该代码时,需要先在Jenkins的「脚本审批」页面放行相关API的调用权限
内容的提问来源于stack exchange,提问作者darvark
相关产品推荐
相关产品推荐

