今天终于搞定了一个很头疼的问题:Jenkins(或者是它的slave)不能deploy那些build好的archive到Nexus库中。


我们的结构是这样的:

1、Jenkins master, serverA, windows7

2、Jenkins slave, serverB, windows7, started with JavaWebStart mode.

3、Nexus server, serverC. access only with SSL.


问题:

Jenkins的一个job可以正常编译,而且能将编译好的包安装到本地的maven库中。但是当Jenkins想把编译好的包发布到远程Nexus库(公司里的公共maven库)上时,出错:peer not authenticated.

此类问题是证书出了毛病,由于Nexus启用了SSL方式访问,所以,其要求所有与之连接的客户端需要手动或自动的安装Nexus服务器self-signed certificate。

分析:

按常理说,maven没有自带java,所以maven的运行需要有java的JDK或JRE支持,需要我们事先在master或slave所在的机器上安装JRE。而如果本地maven(不论是master的,还是slave的)需要和Nexus有互访操作的话,就需要将Nexus的Certificate导入到maven所调用的JRE的keystore中(as a trusted certificate)。

这些步骤我已经全都做过了,可是还是会遇到peer not authenticated问题。

于是我又检查了slave和master机器上所有的JRE,这是发现Jenkins master自身带有一个JRE目录,而这个JRE的keystore中还没有添加Nexus的certificate。

也许这就是问题所在。

解决:

将Nexus的certificate添加到Jenkins master自带的JRE的keystore中,重启Jenkins master服务,然后重试,slave部署archive成功。