配置步骤
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