Jenkins Shared Library 添加第三方包支持

背景

我们在写 Jenkins 的 Shared Library 时,有时候需要引用外部的一些 jar 包,比如 maven central 的一些 lib 等。 具体到我们的例子,需要引用 Gson 做 json 序列化。

问题

我们的 Shared Library 中有如下代码,用到了 Gson:

import com.google.gson.Gson

/**
 * @author wxweven
 */
class JsonUtils {
    static final Gson GSON = new Gson()

    static String toJson(User user) {
        return GSON.toJson(user)
    }
}

但是在执行的时候,Jenkins 报错:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: JsonUtils.groovy: 3: unable to resolve class com.google.gson.Gson @ line 3, column 1. import com.google.gson.Gson

原因就是 Jenkins 无法找到 Gson 依赖。因为 Jenkins 系统默认是没有 Gson jar 包的。

添加 Grab 支持

那么怎么给 Jenkins 的 Shared Library 添加第三方包支持呢? Jenkins 官方文档中有说明:Using third-party libraries

添加 @Grab 注解即可,示例如下:

@Grab('org.apache.commons:commons-math3:3.4.1')
import org.apache.commons.math3.primes.Primes
void parallelize(int count) {
  if (!Primes.isPrime(count)) {
    error "${count} was not prime"
  }
  // …
}

结合我们的代码,添加 @Grab 注解后的版本如下:

@Grab('com.google.code.gson:gson:2.8.6')
import com.google.gson.Gson

/**
 * @author wxweven
 */
class JsonUtils {
    public static final Gson GSON = new Gson()

    static String toJson(User user) {
        return GSON.toJson(user)
    }
}

这样就可以给 Jenkins 中添加 Gson 的 jar 包支持了。

Grab 的语法,跟 maven 的 pom 比较类似,默认的格式是:groupId:artifactId:version

关于 Grab 的更多用法,请参考:官方文档

默认下载的 jar 包,会缓存在 Master 节点的 ~/.groovy/grapes/ 目录下。

结束语

我是梅小西,最近在某东南亚电商公司做 DevOps 的相关事情。从本期开始,将陆续分享基于 Jenkins 的 CI/CD 工作流,包括 Jenkins On k8s 等。

如果你对 Java 或者 Jenkins 等感兴趣,欢迎与我联系,微信:wxweven(备注 DevOps)


我是梅小西,最近在某东南亚电商公司做 DevOps 的相关事情。从本期开始,将陆续分享基于 Jenkins 的 CI/CD 工作流,包括 Jenkins On k8s 等。 如果你对 Java 或者 Jenkins 等感兴趣,欢迎与我联系,微信:wxweven(备注 DevOps)

本文由博客群发一文多发等运营工具平台 OpenWrite 发布

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值