问题描述
最近搭建了一套jenkins 环境,在使用gitlab hooks联动的时候,发现一直报错,检查后台日志发现错误日志如下:
java.lang.NoClassDefFoundError: com/fasterxml/jackson/jaxrs/json/JacksonJsonProvider
at com.dabsquared.gitlabjenkins.gitlab.api.impl.ResteasyGitLabClientBuilder.buildClient(ResteasyGitLabClientBuilder.java:139)
at com.dabsquared.gitlabjenkins.gitlab.api.impl.ResteasyGitLabClientBuilder.buildClient(ResteasyGitLabClientBuilder.java:91)
at com.dabsquared.gitlabjenkins.gitlab.api.impl.AutodetectingGitLabClient.autodetect(AutodetectingGitLabClient.java:315)
at com.dabsquared.gitlabjenkins.gitlab.api.impl.AutodetectingGitLabClient.autodetectOrDie(AutodetectingGitLabClient.java:305)
at com.dabsquared.gitlabjenkins.gitlab.api.impl.AutodetectingGitLabClient.delegate(AutodetectingGitLabClient.java:298)
at com.dabsquared.gitlabjenkins.gitlab.api.impl.AutodetectingGitLabClient.access$200(AutodetectingGitLabClient.java:14)
at com.dabsquared.gitlabjenkins.gitlab.api.impl.AutodetectingGitLabClient$GitLabOperation.execute(AutodetectingGitLabClient.java:335)
at com.dabsquared.gitlabjenkins.gitlab.api.impl.AutodetectingGitLabClient$GitLabOperation.access$100(AutodetectingGitLabClient.java:332)
at com.dabsquared.gitlabjenkins.gitlab.api.impl.AutodetectingGitLabClient.execute(AutodetectingGitLabClient.java:328)
at com.dabsquared.gitlabjenkins.gitlab.api.impl.AutodetectingGitLabClient.getCurrentUser(AutodetectingGitLabClient.java:242)
at com.dabsquared.gitlabjenkins.connection.GitLabConnection$DescriptorImpl.doTestConnection(GitLabConnection.java:240)
at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)
at org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:393)
at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:405)
at org.kohsuke.stapler.interceptor.RequirePOST$Processor.invoke(RequirePOST.java:77)
at org.kohsuke.stapler.PreInvokeInterceptedFunction.invoke(PreInvokeInterceptedFunction.java:26)
at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:208)
at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:141)
at org.kohsuke.stapler.MetaClass$11.doDispatch(MetaClass.java:536)
at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)
at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:766)
解决思路
Jenkins默认为war包,缺失jar包,无法直接在war中添加,经过查询,jenkins在运行时的目录为:/var/cache/jenkins/war/,在此目录下: WEB-INF/lib,添加缺失的jar包,应该能解决此问题。
解决步骤
- 找到缺失的jar。(https://search.maven.org/ 中进行包路径搜索。)
- 找下载对应的jar.
- 复制jar到/var/cache/jenkins/war/WEB-INF/lib,重启服务。
- 如果查看日志,还有缺失,继续查找缺失的jar。
我遇到的情况添加了如下的jar:
-rw-r--r--. 1 root root 75717 2月 25 19:01 jackson-annotations-2.13.1.jar
-rw-r--r--. 1 root root 374588 2月 25 19:01 jackson-core-2.13.1.jar
-rw-r--r--. 1 root root 1534017 2月 25 19:01 jackson-databind-2.13.1.jar
-rw-r--r--. 1 root root 31148 2月 25 19:01 jackson-jaxrs-base-2.13.1.jar
-rw-r--r--. 1 root root 13199 2月 25 19:01 jackson-jaxrs-cbor-provider-2.13.1.jar
-rw-r--r--. 1 root root 15964 2月 25 19:01 jackson-jaxrs-json-provider-2.13.1.jar
-rw-r--r--. 1 root root 14310 2月 25 19:01 jackson-jaxrs-xml-provider-2.13.1.jar
-rw-r--r--. 1 root root 14737 2月 25 19:01 jackson-jaxrs-yaml-provider-2.13.1.jar
-rw-r--r--. 1 root root 126898 2月 25 18:58 javax.ws.rs-api-2.1.1.jar
后续
这个解决办法只是具体问题具体解决,并不是完善的解决方式。可能是安装过程中的问题,也可能是插件的问题。如有更优方案,感谢分享下。
不是母语者。这是自动翻译的。
在寻找这个错误的解决方案时发现了这个。看来这个错误是由GitLab插件和Jackson 2 API插件的不兼容版本引起的。因此,要么把两个插件都更新到合适的版本,要么–如果你的Jenkins实例太老了,就使用两个插件的匹配版本(例如,GitLab 1.5.27和Jackson 2 API 2.13.2-260.v43d711474c77)。