Jenkins通过Grab下载依赖失败

官方文档
极客学院翻译

问题描述

在使用Jenkins的 pipeline as code 特性时,遇到使用第三方jar的情况,使用了
@Grab(group='org.restlet', module='org.restlet', version='1.1.6')注解,但是在Jenkins job运行时下载依赖失败。

解决方法

grape默认时采用maven的 mvnrepository.com 来搜索依赖包,出问题的Jenkins master上是不能访问该仓库的,所以下载依赖失败。

在${user.home}/.groovy/目录下新增文件grapeConfig.xml,指定仓库地址为内网仓库或可访问的maven镜像仓库。

1
2
3
4
5
6
7
8
<ivysettings>
<settings defaultResolver="downloadGrapes"/>
<resolvers>
<chain name="downloadGrapes">
<ibiblio name="public" root="https://mirrors.huaweicloud.com/repository/maven/" m2compatible="true"/>
</chain>
</resolvers>
</ivysettings>

grapeConfig.xml的默认配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<ivysettings>
<settings defaultResolver="downloadGrapes"/>
<resolvers>
<chain name="downloadGrapes" returnFirst="true">
<filesystem name="cachedGrapes">
<ivy pattern="${user.home}/.groovy/grapes/[organisation]/[module]/ivy-[revision].xml"/>
<artifact pattern="${user.home}/.groovy/grapes/[organisation]/[module]/[type]s/[artifact]-[revision](-[classifier]).[ext]"/>
</filesystem>
<ibiblio name="localm2" root="file:${user.home}/.m2/repository/" checkmodified="true" changingPattern=".*" changingMatcher="regexp" m2compatible="true"/>
<!-- todo add 'endorsed groovy extensions' resolver here -->
<ibiblio name="jcenter" root="https://jcenter.bintray.com/" m2compatible="true"/>
<ibiblio name="ibiblio" m2compatible="true"/>
</chain>
</resolvers>
</ivysettings>

Jenkins中grape下载的第三方jar默认是缓存在${user.home}/.groovy/grapes/目录下。可以通过添加Jenkins的启动参数-Dgroovy.grape.report.downloads=true-Divy.message.logger.level=4,在jenkins的日志中观察第三方依赖的下载过程。

如果jenkins master采用docker方式安装时,使用jenkins用户登录,同时设置jenkins的user.home为JENKINS_HOME即可。