jenkins使用k8s容器作为打包节点

配置步骤

1、在manage Jenkins选择 Manage nodes and clouds
2、在manage Credentials里配置访问k8s的 user和token
选择username and password
3、选择Configure Clouds, 配置k8s的 apiserver地址, namespace
4、配置podTemplate
在这里插入图片描述

这里jenkins会自动注入一个叫jnlp的容器,默认是没有配置资源限制的,如果你想限制jnlp的资源,可以新建一个名字是jnlp podTemplate, 然后再容器里配置资源限制,镜像得写一个和注入的版本一致的。

使用方式

pipeline {
 agent {
    kubernetes {
      cloud 'kubernetes'
    }
  }
    stages {
        stage('Checkout') {
            steps {
                container('node16') {
                    git branch: 'main', credentialsId: 'gitlab', url: 'ssh://git@gitlab.xxx.com/xxxx/xxx.git'
                }
            }
        }
        stage('Build') {
            steps {
                container('node16') {
                    sh "env"
                    sh 'npm install'
                    sh 'npm run build'
                }
            }
        }
    }
}

踩坑记录

1、jnlp的java版本和jenkins版本不一致导致 容器节点一直offline

INFO: Connected
Mar 30, 2023 7:20:22 AM hudson.remoting.UserRequest perform
WARNING: LinkageError while performing UserRequest:hudson.slaves.SlaveComputer$SlaveVersion@5e2f59ec
java.lang.UnsupportedClassVersionError: Failed to load hudson.slaves.SlaveComputer$SlaveVersion
        at hudson.remoting.RemoteClassLoader.loadClassFile(RemoteClassLoader.java:455)
        at hudson.remoting.RemoteClassLoader.loadRemoteClass(RemoteClassLoader.java:287)
        at hudson.remoting.RemoteClassLoader.loadWithMultiClassLoader(RemoteClassLoader.java:264)
        at hudson.remoting.RemoteClassLoader.findClass(RemoteClassLoader.java:223)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:348)
        at hudson.remoting.MultiClassLoaderSerializer$Input.resolveClass(MultiClassLoaderSerializer.java:132)
        at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1986)
        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1850)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2160)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1667)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:503)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:461)
        at hudson.remoting.UserRequest.deserialize(UserRequest.java:289)
        at hudson.remoting.UserRequest.perform(UserRequest.java:189)
        at hudson.remoting.UserRequest.perform(UserRequest.java:54)
        at hudson.remoting.Request$2.run(Request.java:376)
        at hudson.remoting.InterceptingExecutorService.lambda$wrap$0(InterceptingExecutorService.java:78)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at hudson.remoting.Engine$1.lambda$newThread$0(Engine.java:122)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.UnsupportedClassVersionError: hudson/slaves/SlaveComputer$SlaveVersion has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:635)
        at hudson.remoting.RemoteClassLoader.loadClassFile(RemoteClassLoader.java:453)
        ... 24 more

原因:jenkins server是用java 11启动的,自己找的jnlp是用的java 8, 再docker hub上找了一个jdk-11版本的。
jenkins/jnlp-slave:4.13.3-1-jdk11

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值