升級Jenkins從2.263.3到2.440.2
###任何一次升級前,先做整體備份,同時最好對plugins目錄和config.xml單獨備份。
###對于任何一次插件安裝,務必安裝前先備份當前的plugins目錄,這是血的教訓。
升級過程
1、 升級2.263.3到2.263.4:
這個過程主要解決role-strategy 插件的兼容性問題;
你會遇到問題:
SEVERE jenkins.model.Jenkins#save: An attempt to save Jenkins’’ global configuration before it has been loaded has been made during milestone Configuration for all jobs updated. This is indicative of a bug in the caller and may lead to full or partial loss of configuration. java.lang.IllegalStateException: call trace at jenkins.model.Jenkins.save(Jenkins.java:3356) at jenkins.model.Jenkins.saveQuietly(Jenkins.java:3384) at jenkins.model.Jenkins.setSecurityRealm(Jenkins.java:2636) at jenkins.model.Jenkins 16. r u n ( J e n k i n s . j a v a : 3328 ) a t o r g . j v n e t . h u d s o n . r e a c t o r . T a s k G r a p h B u i l d e r 16.run(Jenkins.java:3328) at org.jvnet.hudson.reactor.TaskGraphBuilder 16.run(Jenkins.java:3328)atorg.jvnet.hudson.reactor.TaskGraphBuilderTaskImpl.run(TaskGraphBuilder.java:169) at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:296) at jenkins.model.Jenkins$5.runTask(Jenkins.java:1128) at org.jvnet.hudson.reactor.Reactor 2. r u n ( R e a c t o r . j a v a : 214 ) a t o r g . j v n e t . h u d s o n . r e a c t o r . R e a c t o r 2.run(Reactor.java:214) at org.jvnet.hudson.reactor.Reactor 2.run(Reactor.java:214)atorg.jvnet.hudson.reactor.ReactorNode.run(Reactor.java:117) at jenkins.security.ImpersonatingExecutorService 1. r u n ( I m p e r s o n a t i n g E x e c u t o r S e r v i c e . j a v a : 68 ) a t j a v a . u t i l . c o n c u r r e n t . T h r e a d P o o l E x e c u t o r . r u n W o r k e r ( T h r e a d P o o l E x e c u t o r . j a v a : 1149 ) a t j a v a . u t i l . c o n c u r r e n t . T h r e a d P o o l E x e c u t o r 1.run(ImpersonatingExecutorService.java:68) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor 1.run(ImpersonatingExecutorService.java:68)atjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)atjava.util.concurrent.ThreadPoolExecutorWorker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748)
解決方法:
Update to https://github.com/jenkinsci/role-strategy-plugin/releases/tag/role-strategy-3.1 and you should be OK.
2、升級2.263.4到2.426.3:
首先,需要升級JDK8到JDK17;
其次,跨了這么多版本,主要是因為plugins,如果不直接一步到位最新的LTS版本,需要一個個的去驗證出問題的各個plugin,工作量太大了。
升級到最新的LTS版本,可以一鍵使用最新的plugins,然后再通過控制臺啟動日志,找到不兼容的部分插件,然后逐個去適配。
plugins地址為:https://plugins.jenkins.io/ui/search/
因為即便升級到了最新的LTS版本,仍然有部分插件不適配,就需要到plugins庫中找到相應的版本才可以。
再次,如果jenkins配置了slave,所有的slave機器都需要安裝JDK17,并刪除remoting.jar,然后重新建立連接。
最后,最大的問題在于,如果java代碼仍然使用JDK8,如果job中是使用maven插件來編譯項目,則這些job將不可用,原因在于jenkins服務使用了最新的JDK17來啟動,插件也都應該是JDK17的,所以只能將maven插件job換成freestyle的項目,使用shell命令行來構建java項目。
同理,對于與JDK 版本相關的插件,都存在類似的不兼容問題,比如fortify。
3、升級2.426.3到2.440.2.
這個基本直接升級就可以了。
4、升級2.440.2到2.440.3
這里又涉及了gradle的兼容問題,如果項目代碼使用早期版本的gradle,未升級gradle,則原來gradle插件配置將不可用。
升級總結
Jenkins升級,有幾個問題要注意:
1、升級版本問題:
要考慮項目實際使用的JDK版本,如果你也是JDK8的項目,升級到最新的LTS版本,就會面臨我提到的上面的問題。
不升級到最新版本,就會面臨所有不兼容插件的適配問題,比如升級到指定版本,通過控制臺啟動日志 ,找到不兼容插件,然后逐個找到適合當前版本,每個插件可能需要適配很多次。
2、備份:
jenkins最重要的就是插件,插件更新和升級前,務必做好備份。