Jenkins Error com.thoughtworks.xstream.mapper.CannotResolveClassException: hudson.security.ProjectMatrixAuthorizationStrategy

พอเข้าช่วงที่ต้องมา 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 ที่ผมได้ลองมี

PlatformSoftwareCurrent VersionUpdate Version
WindowsJenkins (msi)2.504.22.528.3
LinuxJenkins (container)2.504.22.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 คนเจอปัญหาพวกนี้เยอะเหมือนกันครับ

เอาจริง ถ้าเคสที่ผมโดย อาจจะต้องไปดูในไฟล์ 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.