虛擬機器下安裝jenkins報錯:該jenkins例項似乎已離線
今天在虛擬機器上安裝jenkins,記錄一下其中的一個錯誤的處理。
首先準備好jdk和tomcat,配置好環境
cd /usr/local/apache-tomcat-7.0.57/webapps
webapp下有一個jenkins.war檔案
之後直接交給tomcat來解壓部署
cd ../bin
./startup.sh
cd ../logs
tail -100fcatalina.out檢視log日誌
會發現最後後報錯:
五月 24, 2018 2:16:55 下午 hudson.model.UpdateCenter updateDefaultSite 警告: Upgrading Jenkins. Failed to update the default Update Site 'default'. Plugin upgrades may fail. javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1949) at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:302) at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296) at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1506) at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216) at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979) at sun.security.ssl.Handshaker.process_record(Handshaker.java:914) at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387) at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559) at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185) at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1512) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1440) at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254) at hudson.model.DownloadService.loadJSON(DownloadService.java:167) at hudson.model.UpdateSite.updateDirectlyNow(UpdateSite.java:190) at hudson.model.UpdateCenter.updateDefaultSite(UpdateCenter.java:2194) at jenkins.install.SetupWizard.init(SetupWizard.java:173) at jenkins.install.InstallState$4.initializeState(InstallState.java:110) at jenkins.model.Jenkins.setInstallState(Jenkins.java:1033) at jenkins.install.InstallUtil.proceedToNextStateFrom(InstallUtil.java:97) at jenkins.install.InstallState$1.initializeState(InstallState.java:55) at jenkins.model.Jenkins$17.run(Jenkins.java:3149) at org.jvnet.hudson.reactor.TaskGraphBuilder$TaskImpl.run(TaskGraphBuilder.java:169) at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:296) at jenkins.model.Jenkins$5.runTask(Jenkins.java:1062) at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:214) at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:117) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:387) at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292) at sun.security.validator.Validator.validate(Validator.java:260) at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324) at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:229) at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124) at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1488) ... 29 more Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:146) at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:131) at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280) at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:382) ... 35 more |
如果沒有看日誌,那麼開啟192.168.211.103:8080/jenkins會顯示該jenkins例項似乎已離線
為什麼會報這個錯誤呢?
參考:
原因是就是升級站點的連結https://updates.jenkins.io/update-center.json預設是https的,如何解決呢?
解決方案1:
安裝外掛那個頁面,就是提示你offline的那個頁面,不要動。然後開啟一個新的tab,輸入網址http://192.168.211.103:8080/jenkins/pluginManager/advanced。 這裡面最底下有個【升級站點】,把其中的連結由https改成http的就好了,http://updates.jenkins.io/update-center.json。 然後在服務列表中關閉jenkins,再tomcat重新啟動,這樣就能正常聯網了
解決方案2:
當然,原則上也可以參考解決PKIX的第二種方式,為updates.jenkins.io生成證書並匯入到JAVA_HOME/jre/lib/security目錄下(留坑)