jenkins-k8s-Class not found io.kubernetes.client.openapi.models.V1Service报错
1.背景
由于jenkins需要迁移的原因,公司的jenkins升级至最新版本。相同的ci/cd流程,以及相同的执行脚本,但是就是在最后一步cd推送至kubernetes集群的时候报错。
本次案例相关版本:
- Jenkins版本(2.2.338)
- Kubernetes Continuous Deploy(2.3.1)
- Jackson 2 api(2.13.1)
报错见以下:
ERROR: ERROR: Can't construct a java object for tag:yaml.org,2002:io.kubernetes.client.openapi.models.V1Service; exception=Class not found: io.kubernetes.client.openapi.models.V1Service in 'reader', line 1, column 1: apiVersion: v1 ^ hudson.remoting.ProxyException: Can't construct a java object for tag:yaml.org,2002:io.kubernetes.client.openapi.models.V1Service; exception=Class not found: io.kubernetes.client.openapi.models.V1Service in 'reader', line 1, column 1 apiVersion: v1
2.排错过程
发现问题后就开始百度搜索,刚开始搜索到一篇文章,解决步骤如以下:
1.git clone https://github.com/jenkinsci/jackson2-api-plugin【选择你需要的版本】
2.删除根pom一下内容
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.jenkins.tools.bom</groupId>
<artifactId>bom-2.222.x</artifactId>
<version>887.vae9c8ac09ff7</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
<version>${jackson.version}</version>
<exclusions>
<exclusion>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.jenkins.plugins</groupId>
<artifactId>snakeyaml-api</artifactId>
</dependency>
3.执行mvn clean install打包
有可能会build失败,报错[ERROR] Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:3.0.0-M3:enforce (display-info) on project jackson2-api: Some Enforcer rules have failed. Look above for specific messages explaining why the rule failed. -> [Help 1]
在CommandLine填写 install -Denforcer.skip=true
选择该配置执行
4.将target中jackson2-api.hpi上传至jenkins插件
以上案例发现几个问题,对我这次修复不太适用。
1.该文章中修复方法的jenkins版本肯定比2.338版本要早几个版本。导致插件版本不同。如jackson2的版本(在2022年3月10日 时),在git最新的tag为2.12.4,但是在2.338的jenkins版本里,最新的版本为2.13.1-246.我这边如果真的替换编译也不一定能成功。
2.重新编译时间非常长,在一台4C8G的机器上,跑了2小时,可能是网速的问题,但是最后还是报错了。
3.搜索某些答案,其中提到,如果重新编译jackson2的插件,可能导致其他一些关联插件没有办法使用。
由于该方式成本过高,只能查找其他解决方案。
3.问题解决
于是仔细一想,只有cd部分出现问题,果然在网上找到这部分案例。该案例说将kubernetes cd插件降级至1.0.0即可。
根据以上案例,可以看出这篇案例不要降级jackson 插件,不然可能会对现有插件有影响。
最后按照这篇文章降级kubernetes插件至1.0.0完美解决。
以下是我降级后的截图。
相关参考:
https://stackoverflow.com/questions/62688901/class-not-found-io-kubernetes-client-openapi-models-v1service
https://blog.csdn.net/lalalala233666/article/details/119936800