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

 

 

posted @ 2022-03-10 14:31  小家电维修  阅读(390)  评论(0编辑  收藏  举报