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

如何在Jenkins Pipeline中获取其他Job的构建编号及URL用于邮件通知

嗨,我来帮你搞定这个Jenkins Pipeline的需求!要在邮件通知任务里拿到另一个构建任务的最新BUILD_NUMBER和构建URL——不管构建成功还是失败,我给你整理了几种实用的方案,你可以根据自己的场景选择:

方案1:通过Groovy脚本直接获取Jenkins内部构建信息(最直接)

这种方式直接调用Jenkins的内置API,能快速拿到目标任务的最新构建数据,不管它的状态是成功、失败还是被取消。

在你的邮件通知Pipeline脚本里添加这段代码:

// 替换成你的构建任务的全名(如果任务在文件夹里,要写全路径,比如'FolderName/YourBuildJob')
def targetBuildJob = Jenkins.instance.getItemByFullName('你的构建任务名称')
// 获取最新的构建记录(无论状态)
def latestBuild = targetBuildJob.getLastBuild()

if (latestBuild) {
    def buildNumber = latestBuild.getNumber()
    def buildUrl = latestBuild.getUrl()
    def buildStatus = latestBuild.getResult()

    // 这里把变量代入邮件逻辑,示例用Jenkins内置的mail步骤
    mail to: '你的收件人邮箱',
         subject: "构建状态通知:${targetBuildJob.name} #${buildNumber} ${buildStatus}",
         body: """
         构建编号:${buildNumber}
         构建详情URL:${Jenkins.instance.rootUrl}${buildUrl}
         构建状态:${buildStatus}
         """
} else {
    echo "注意:目标构建任务还没有任何构建记录哦!"
}

注意事项:

  • 你需要在Jenkins的脚本安全里授权相关方法:进入Manage Jenkins -> In-process Script Approval,批准Jenkins.instance.getItemByFullName、getLastBuild、getNumber这些方法的调用,不然脚本会报错。
  • 如果Jenkins开启了文件夹,记得写全任务的路径名称。
方案2:调用Jenkins REST API获取(适合跨场景调用)

如果不想用Groovy脚本,也可以通过Jenkins的REST API来拉取最新构建信息,适合需要跨系统调用或者不想处理脚本权限的场景。

先确保你安装了HTTP Request插件,然后在邮件任务的Pipeline里这样写:

def jobName = '你的构建任务名称'
// 调用Jenkins API,如果你需要认证,记得配置凭据
def apiResponse = httpRequest url: "${env.JENKINS_URL}/job/${jobName}/lastBuild/api/json",
                          authentication: '你的Jenkins凭据ID' // 可选,若Jenkins开启了认证

// 解析API返回的JSON数据
def buildData = new groovy.json.JsonSlurper().parseText(apiResponse.content)
def buildNumber = buildData.number
def buildUrl = buildData.url
def buildStatus = buildData.result

// 发送邮件
mail to: '你的收件人邮箱',
     subject: "构建状态通知:${jobName} #${buildNumber} ${buildStatus}",
     body: "构建编号:${buildNumber}\n构建详情URL:${buildUrl}\n构建状态:${buildStatus}"

注意事项:

  • 如果Jenkins开启了安全认证,需要创建一个有读取任务权限的凭据(比如用户名+密码),并在httpRequest步骤里指定。
  • 确保env.JENKINS_URL变量能正确获取到你的Jenkins地址,或者直接写死你的Jenkins域名/IP。
方案3:构建任务主动传递参数给邮件任务(最稳妥,无权限问题)

这个方案是让构建任务在完成后(无论成功失败)主动触发邮件通知任务,并把当前的BUILD_NUMBER、BUILD_URL和构建状态作为参数传递过去,完全避开脚本权限的问题,还能确保通知的是本次构建的信息,不会因为中间有新构建而拿错数据。

第一步:配置构建任务的Pipeline

在构建任务的Pipeline末尾添加post阶段,用always确保不管结果如何都触发邮件任务:

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                // 这里是你的构建步骤,比如编译、打包等
                echo "执行构建操作..."
            }
        }
    }
    post {
        always { // 无论构建成功/失败/取消,都执行下面的逻辑
            build job: '你的邮件通知任务名称',
                  parameters: [
                      string(name: 'TARGET_BUILD_NUMBER', value: "${currentBuild.number}"),
                      string(name: 'TARGET_BUILD_URL', value: "${currentBuild.absoluteUrl}"),
                      string(name: 'TARGET_BUILD_STATUS', value: "${currentBuild.result ?: 'UNKNOWN'}")
                  ],
                  wait: false // 不需要等待邮件任务完成,不阻塞构建
        }
    }
}

第二步:配置邮件通知任务为参数化构建

  1. 进入邮件通知任务的配置页面,找到General部分,勾选This project is parameterized。
  2. 添加三个String Parameter:
    • 名称:TARGET_BUILD_NUMBER,描述:目标构建任务的编号
    • 名称:TARGET_BUILD_URL,描述:目标构建任务的详情URL
    • 名称:TARGET_BUILD_STATUS,描述:目标构建任务的状态

第三步:编写邮件任务的Pipeline脚本

直接使用传递过来的参数发送邮件:

pipeline {
    agent any
    parameters {
        string(name: 'TARGET_BUILD_NUMBER', description: '目标构建任务的编号')
        string(name: 'TARGET_BUILD_URL', description: '目标构建任务的详情URL')
        string(name: 'TARGET_BUILD_STATUS', description: '目标构建任务的状态')
    }
    stages {
        stage('Send Notification') {
            steps {
                mail to: '你的收件人邮箱',
                     subject: "构建状态通知:#${params.TARGET_BUILD_NUMBER} ${params.TARGET_BUILD_STATUS}",
                     body: """
                     您好,以下是最新的构建信息:
                     构建编号:${params.TARGET_BUILD_NUMBER}
                     查看构建详情:${params.TARGET_BUILD_URL}
                     构建状态:${params.TARGET_BUILD_STATUS}
                     """
            }
        }
    }
}
方案选择建议
  • 如果你需要每次邮件任务都获取绝对最新的构建信息(哪怕中间有新构建触发),选方案1或2;
  • 如果你需要构建完成后立刻通知对应本次构建的信息,且不想处理Jenkins脚本权限问题,方案3是最优解。

内容的提问来源于stack exchange,提问作者sudhir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:21:24