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

在Jenkins/Groovy中,如何获取异步触发构建的Build ID?

Jenkins异步触发构建并获取Build ID的方法

在Jenkins流水线中,build(job: 'path/to/job')是阻塞式触发逻辑,会等待构建完成后返回RunWrapper对象;若设置wait: false实现异步触发,却无法获取被触发构建的引用及Build ID。以下是两种可行的解决方法:

方法1:通过Jenkins REST API触发并提取Build ID

借助Jenkins的REST API触发构建,从响应头中直接提取新构建的ID,示例代码如下:

def targetJob = 'path/to/job'
// 替换Job路径格式以适配API规则
def apiJobPath = targetJob.replace('/', '/job/')
def triggerResult = httpRequest(
    url: "${env.JENKINS_URL}/job/${apiJobPath}/build",
    httpMode: 'POST',
    authentication: 'jenkins-api-credential', // 提前配置好的API凭证ID
    validResponseCodes: '201'
)
// 从响应头的Location字段解析Build ID
def buildLocation = triggerResult.headers.find { it.name == 'Location' }.value
def buildId = buildLocation.split('/')[-1]
echo "已异步触发构建,Build ID:${buildId}"

注意:需要提前安装HTTP Request插件,且流水线运行账号需拥有调用Jenkins API的权限,凭证建议使用「用户名+API Token」组合。

方法2:调用Jenkins内部Java API直接获取Build ID

直接操作Jenkins的Job对象,调度构建后立即获取Build ID,无需等待构建执行完成,示例代码:

def targetJob = Jenkins.instance.getItemByFullName('path/to/job')
// 调度构建,0表示无延迟
def futureBuild = targetJob.scheduleBuild2(0, new Cause.UserIdCause())
// 仅等待构建进入队列并分配ID,不会等待构建执行完成
def startedBuild = futureBuild.waitForStart()
def buildId = startedBuild.id.toString()
echo "已异步触发构建,Build ID:${buildId}"

注意:这种方法需要流水线运行账号拥有Jenkins.Read和Job.Build权限,无需额外安装插件,执行效率更高。

额外提醒

  • 两种方法都需做好异常处理,比如捕获Job不存在、权限不足等情况,避免流水线中断。
  • 多节点Jenkins环境下,需确保Jenkins.instance指向正确的主节点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 17:32:15