พอเข้าช่วงที่ต้องมา Update Jenkins ให้รอบครึ่งปี แล้วหลังจากลองซ้อมที่ DR เจอ Error CannotResolveClassException โดยมี Stack Trace เต็มๆตามนี้ครับ
com.thoughtworks.xstream.mapper.CannotResolveClassException: hudson.security.ProjectMatrixAuthorizationStrategy at com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:81) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:125) at com.thoughtworks.xstream.mapper.DynamicProxyMapper.realClass(DynamicProxyMapper.java:55) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:125) at com.thoughtworks.xstream.mapper.PackageAliasingMapper.realClass(PackageAliasingMapper.java:88) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:125) at com.thoughtworks.xstream.mapper.ClassAliasingMapper.realClass(ClassAliasingMapper.java:79) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:125) at com.thoughtworks.xstream.mapper.ArrayMapper.realClass(ArrayMapper.java:74) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:125) at com.thoughtworks.xstream.mapper.SecurityMapper.realClass(SecurityMapper.java:71) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:125) at hudson.util.XStream2$CompatibilityMapper.realClass(XStream2.java:452) at hudson.util.xstream.MapperDelegate.realClass(MapperDelegate.java:46) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:125) at com.thoughtworks.xstream.mapper.CachingMapper.realClass(CachingMapper.java:47) at hudson.util.RobustReflectionConverter.determineType(RobustReflectionConverter.java:551) at hudson.util.RobustReflectionConverter.doUnmarshal(RobustReflectionConverter.java:349) Caused: jenkins.util.xstream.CriticalXStreamException: ---- Debugging information ---- cause-exception : com.thoughtworks.xstream.mapper.CannotResolveClassException cause-message : hudson.security.ProjectMatrixAuthorizationStrategy class : hudson.model.Hudson required-type : hudson.model.Hudson converter-type : hudson.util.RobustReflectionConverter path : /hudson/authorizationStrategy line number : 16 version : 2.528.3 ------------------------------- at hudson.util.RobustReflectionConverter.doUnmarshal(RobustReflectionConverter.java:384) at hudson.util.RobustReflectionConverter.unmarshal(RobustReflectionConverter.java:291) at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:74) at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:72) at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:68) at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:52) at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:136) at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32) at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1468) at hudson.util.XStream2.unmarshal(XStream2.java:230) at hudson.util.XStream2.unmarshal(XStream2.java:201) at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1445) at hudson.XmlFile.unmarshal(XmlFile.java:196) Caused: java.io.IOException: Unable to read C:\Users\invest\.jenkins\config.xml at hudson.XmlFile.unmarshal(XmlFile.java:199) at hudson.XmlFile.unmarshal(XmlFile.java:179) at jenkins.model.Jenkins.load(Jenkins.java:3361) at jenkins.model.Jenkins$13.run(Jenkins.java:3480) at org.jvnet.hudson.reactor.TaskGraphBuilder$TaskImpl.run(TaskGraphBuilder.java:175) at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:304) at jenkins.model.Jenkins$5.runTask(Jenkins.java:1149) at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:221) at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:120) at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:68) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) at java.base/java.lang.Thread.run(Thread.java:1583) Caused: org.jvnet.hudson.reactor.ReactorException at org.jvnet.hudson.reactor.Reactor.execute(Reactor.java:290) at jenkins.InitReactorRunner.run(InitReactorRunner.java:49) at jenkins.model.Jenkins.executeReactor(Jenkins.java:1184) at jenkins.model.Jenkins.<init>(Jenkins.java:983) at hudson.model.Hudson.<init>(Hudson.java:102) at hudson.model.Hudson.<init>(Hudson.java:87) at hudson.WebAppMain$3.run(WebAppMain.java:249) Caused: hudson.util.HudsonFailedToLoad at hudson.WebAppMain$3.run(WebAppMain.java:277)
สำหรับ Environment ที่ผมได้ลองมี
| Platform | Software | Current Version | Update Version |
|---|---|---|---|
| Windows | Jenkins (msi) | 2.504.2 | 2.528.3 |
| Linux | Jenkins (container) | 2.504.2 | 2.528.3 |
อาการเดียวกันเลยครับ สุดท้ายใช้ท่าไม้ตาม Rollback VM เอาเข้า ง่ายดี จากนั้นเลยค่อยอ่าน Change Log แล้วไปเจอว่าระหว่าง 2.504.2 ไป 2.528.3 มันมี 2.516.1 ซึ่งมีรายละเอียดของการเปลี่ยนแปลงเยอะเหมือนกัน อาทิ เช่น
- ปรับ UI ย้าย Menu Manage Jenkin ไปข้าง User
- เพิ่ม path ต่างๆ /health เป็นต้น
- Jenkins' own user database no longer accepts new passwords longer than supported by bcrypt (72 bytes). Users with longer passwords are advised to change their password. JENKINS-75533
- Remove jbcrypt library. If you use the Active Directory plugin, you must update it to version 2.40 at the same time Jenkins is updated to 2.516.1. JENKINS-75533
หลังจากอ่าน Change Log มาแล้ว เปลี่ยนแทนที่จะจาก 2.504.2 > 2.528.3 จะเป็น 2.504.2 > 2.516.1 > 2.528.3 เอา 2.516.1 มาคั่นกลาง และทดสอบตาม Change Log อย่างพวก Local User Password ว่า มันจะพังไหม
หลังจากลองผ่านฉลุยเลยครับ โดย Step เต็มๆของผม มี 2 ขั้นตอนครับ
🛂 Jenkins 2.504.2 > 2.516.1
- Update Plugin + Restart
- ทดสอบ Login Local User / AD --> อันนี้เจอ Local User บางอัน Pass ใช้ไม่ได้ พวก pass เกิด 9 ตัวอักษร หรือมีตัว $ จะพังหมด
- ทดสอบ Flow CI/CD พวก Build / Deploy .. อันนี้มีจด Step ไว้รอบก่อน เลยทำตาม run book เลย
- ถ้าผ่านเรา Snapshot VM
🛂 Jenkins 2.516.1 > 2.528.3 - (ภาพรวมเหมือนอันก่อนหน้าเลยครับ)
- ลองดูก่อนว่า Start ได้ไหม ก่อนหน้ามันจะ Error CannotResolveClassException: hudson.security.ProjectMatrixAuthorizationStrategy ปรากฏว่ารอบนี้เข้าหน้า login ได้ครับ สบายใจแล้ว
- Update Plugin + Restart
- ทดสอบ Login Local User / AD
- ทดสอบ Flow CI/CD พวก Build / Deploy ..
- ถ้าผ่านลบ Snapshot VM ของเดิม แล้ว Backup อันนี้แทน
จบไปแล้วครับ สำหรับ Blog ที่มาจด Step อันที่จริงคิดว่ามันผ่านด้วยแหละ ผมเลยไม่ได้ดู Change Log ละเอียดมองผ่านๆ แต่เจอปัญหาลองไปไล่ดูใน Forum คนเจอปัญหาพวกนี้เยอะเหมือนกันครับ
- After updating from 2.462.3 to 2.528.1 Jenkins stopped working - Using Jenkins - Jenkins
- Failed to load plugin and start after update to 2.524 - Using Jenkins - Jenkins
- Cannot Resolve Class Exception: hudson. security. Global Matrix Authorization Strategy - Using Jenkins - Jenkins
- เป็นต้น
เอาจริง ถ้าเคสที่ผมโดย อาจจะต้องไปดูในไฟล์ config.xml ผมเข้าใจว่าแต่ละ plugin มันมีของยัดเข้าไปในนั้น รวมถึงเรื่อง plugin + minimum Jenkins core ด้วย เลย แต่ถ้าไล่ตรวจมันนาน เลยทดสอบที่ ENV DR ก่อนจะได้เห็นปัญหาก่อนทำที่เครื่องหลัก
Reference
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.



