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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:33:48