Tomcat10 cannot start Jenkins On Windows 11

เนื่องจากได้ให้ทางทีม Operation ลอง Refresh คู่มือติดตั้ง Jenkin เดิมที่ทำไว้ 5-6 ปีก่อนบน Windows 10 ดูว่า ถ้าลองขยับ Tech ใหม่ๆจะมีปัญหาไหม ที่นี้เจอปัญหาในส่วนของ Tomcat ครับ

ลองดู Exception

org.apache.catalina.core.StandardContext.listenerStart Error configuring application listener of class [jenkins.JenkinsHttpSessionListener]
java.lang.NoClassDefFoundError: javax/servlet/http/HttpSessionListener
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2431)
at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:864)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1333)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1187)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:540)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:521)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:151)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4589)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5126)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.manager.ManagerServlet.start(ManagerServlet.java:1399)
at org.apache.catalina.manager.HTMLManagerServlet.start(HTMLManagerServlet.java:704)
at org.apache.catalina.manager.HTMLManagerServlet.doPost(HTMLManagerServlet.java:223)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:689)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:770)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:223)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158)
at org.apache.catalina.filters.CsrfPreventionFilter.doFilter(CsrfPreventionFilter.java:211)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158)
at org.apache.catalina.filters.HttpHeaderSecurityFilter.doFilter(HttpHeaderSecurityFilter.java:126)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:668)
at org.apache.catalina.valves.RequestFilterValve.process(RequestFilterValve.java:348)
at org.apache.catalina.valves.RemoteAddrValve.invoke(RemoteAddrValve.java:53)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:682)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:332)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:859)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1568)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: javax.servlet.http.HttpSessionListener
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1364)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1187)
คู่มือเดิม + Version ปัจจุบัน
  • Windows 10
  • Oracle JDK 8
  • Tomcat 9.0 (เดิมที่ 8.0)
  • Jenkins LTS Version ล่าสุด
ค้นหาข้อมูล
สรุป
  • ตอนติดตั้ง Jenkins ไม่ต้องใช้ Tomcat แล้ว ขอแค่สร้าง Folder สำหรับให้ Jenkins มันทำงาน เช่น C:\JenkinsWin\
  • นำไฟล์ jenkins.war วางไว้ใน JenkinsWin
  • จากนั้นเปิด Command Line เข้าไปที่ Path JenkinsWin แล้ว Run คำสั่ง
java -jar jenkins.war

สำหรับใครที่อยากให้ผูกเป็น Windows Service มีขั้นตอน ดังนี้

  • Setup Jenkins ให้เรียบร้อยก่อน
  • เข้าด้วย user admin และไป Manage Jenkins และหาเมนู Install as Windows Service (มันจะขึ้นกรณีที่เราไม่ได้ทำ Service ไว้ จากนั้นตามขั้นตอนเลย install > restart
  • ถ้าเข้ามาดูในหน้าจอ Control Panel > Administrative Tools > Services มีตัว Jenkins ขึ้นมาเป็น Service แล้วครับ

Ref: Jenkins : Installing Jenkins as a Windows service

Note
  • จาก Blog นี้มีหลายคนสอบถามกัน ถ้าเป็นเครื่อง Windows ทำไมถึงไม่ Deploy Docker บน WSL2 นั้นเพราะ เครื่อง Build นี้ ถูกเตรียมไว้ Build Desktop Application (.NET Framework) ที่ Run บน Windows ครับ รวมถึงเตรียมไว้สำหรับสร้าง Windows Container Image ครับ //ถ้าลูกค้าเป็น Windows Server 2019 แล้วอยาก Containerized ต้องมาทางนี้ครับ T__T
  • ส่วนถ้าเป็น Web App ปกติจะใช้เครื่อง Linux Build ครับ

Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts sent to your email.