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

Jenkins Pipeline中Groovy代码调用get()触发空指针异常求助

解决Jenkins Pipeline中HttpBuilder-NG的NullPointerException问题

这个问题我之前在Jenkins Pipeline里用Groovy第三方库时也碰到过,核心原因是Jenkins Pipeline的Groovy运行环境和本地标准Groovy环境有很大差异,尤其是动态依赖加载(比如@Grab注解)的支持不好,导致HttpBuilder-NG没有被正确初始化,最终configure方法返回了null,调用get()时就抛出了NPE。

下面给你两个可行的解决方案:

方案一:改用Jenkins官方的httpRequest插件(推荐)

Jenkins有专门的httpRequest插件来处理HTTP请求,完全适配Pipeline环境,不需要手动处理依赖,步骤如下:

  1. 先在Jenkins的「插件管理」里安装httpRequest插件
  2. 修改你的Pipeline代码为:
pipeline {
    agent any
    stages {
        stage('Fetch Astronaut Data') {
            steps {
                script {
                    // 发送HTTP请求获取响应
                    def response = httpRequest 'http://api.open-notify.org/astros.json'
                    // 把响应内容解析为JSON对象
                    def astros = readJSON text: response.content
                    
                    println "There are ${astros.number} astronauts in space right now."
                    astros.people.each { p ->
                        println " - ${p.name} (${p.craft})"
                    }
                }
            }
        }
    }
}

这个方案最稳妥,因为是Jenkins官方支持的方式,不会有类加载或依赖的问题。

方案二:手动添加HttpBuilder-NG依赖到Jenkins(适合一定要用原库的场景)

如果必须使用HttpBuilder-NG,需要绕过@Grab的动态加载,手动把依赖包放到Jenkins的类路径中:

  1. 下载http-builder-ng-core-1.0.3.jar以及它的所有依赖包(比如Groovy相关、HTTP客户端相关的jar)
  2. 把这些jar包复制到Jenkins服务器的$JENKINS_HOME/plugins/workflow-cps/lib/目录下(如果没有lib文件夹就新建一个)
  3. 重启Jenkins服务,让新的依赖生效
  4. 修改你的Pipeline代码,去掉@Grab注解(因为依赖已经在Jenkins的classpath里了):
import static groovyx.net.http.HttpBuilder.configure

def astros = configure {
    request.uri = 'http://api.open-notify.org/astros.json'
}.get()

println "There are ${astros.number} astronauts in space right now."
astros.people.each { p ->
    println " - ${p.name} (${p.craft})"
}

为什么@Grab在Jenkins里不行?

Jenkins Pipeline使用CPS转换来实现脚本的暂停和恢复,这种机制会改变Groovy代码的执行逻辑,而@Grab是Groovy的动态依赖加载特性,在CPS转换的环境下无法正确执行,导致HttpBuilder-NG的类没有被加载,configure方法无法初始化出有效的HttpBuilder实例,最终返回null,调用get()就会抛出NullPointerException。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:30:42