今天終于搞定了一個很頭疼的問題: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成功。