如何在Jenkins流水线中获取触发子Job的构建号及访问URL
获取Jenkins子Job的构建号与访问URL
嘿,这个问题其实很好解决——Jenkins Pipeline里的build步骤会返回一个Run对象,这个对象里藏着你需要的所有子Job构建信息:构建号、访问URL全有,直接拿来用就行!
给你改好的示例代码,每一步都标了注释,一看就懂:
node { stage("building_other_components") { // 执行子Job,把返回的Run对象存起来 def job1Run = build 'job1' def job2Run = build 'job2' // 从Run对象里拿构建号 def job1BuildNum = job1Run.number def job2BuildNum = job2Run.number // 获取子Job的基础访问URL(Jenkins自动生成的完整地址) def job1BaseUrl = job1Run.absoluteUrl def job2BaseUrl = job2Run.absoluteUrl // 拼接你需要的last-changes路径 def job1LastChangesUrl = "${job1BaseUrl}last-changes/" def job2LastChangesUrl = "${job2BaseUrl}last-changes/" // 这里就可以加邮件发送逻辑啦,把上面的URL塞进邮件内容就行 echo "Job1的last-changes地址:${job1LastChangesUrl}" echo "Job2的last-changes地址:${job2LastChangesUrl}" } }
额外给你几个实用小提示:
- 默认情况下
build是阻塞式的——会等子Job跑完才继续执行流水线,刚好符合你要发邮件的需求(总不能子Job还没跑完就发URL吧)。如果需要异步执行,可以加wait: false参数,但那时候要注意处理构建状态,一般不推荐在发邮件场景用。 - 如果子Job需要传参数,也完全不影响,比如这么写:
build job: 'job1', parameters: [string(name: 'ENV', value: 'prod')],返回的还是Run对象,照样能拿number和absoluteUrl。 - 要是子Job多了不想一个个写,用循环批量处理更高效:
node { stage("building_other_components") { def jobList = ['job1', 'job2', 'job3'] // 把所有子Job名放这里 def jobLastChangesUrls = [:] jobList.each { jobName -> def runInstance = build jobName jobLastChangesUrls[jobName] = "${runInstance.absoluteUrl}last-changes/" } // 之后遍历这个map就能把所有URL塞进邮件了 jobLastChangesUrls.each { jobName, url -> echo "${jobName}的last-changes地址:${url}" } } }
这样不管你有多少个子Job,都能轻松收集到需要的URL,直接整合到邮件模板里就搞定啦~
内容的提问来源于stack exchange,提问作者Geist
相关产品推荐
相关产品推荐

