
当前容器化已经非常普及,无论是应用还是运维工具,绝大部分都已经官方支持容器化。而随着容器化的到来,一些新的问题也随之到来。例如:我们如何用不同的JAVA版本来进行项目构建工作。
背景需求
如果一家公司开发是第三方外包的,往往会面临开发使用的语言不同,同一开发语言的版本不同,而要做到统一开发语言和版本几乎是不可能的。使用不同的开发语言比较容易实现,但是同一开发语言的不同版本还是碰到了问题。
我遇到的问题是,指定了agent label为oepnjdk-16,但每次运行自动下载了oepnjdk-8,所以想使用不同JAVA版本的agent node节点去做编译工作在K8S环境下变的不那么容易。
这个问题不解决,开发这边就无法使用Jenkins去做编译构建发布。因此,这个问题必须尽快解决。下面我就介绍下我的整个解决问题的过程。
解决问题过程
agent { label 'openjdk16' }
//添加一个暂停流水线步骤用于登录到pod中排查,否则启动的agent node用完会自动注销
stage("pause-01"){
steps {
input "Does the staging environment look ok?"
}
}

# kubectl -n devops get pods
NAME READY STATUS RESTARTS AGE
devops-jenkins-jdk8-maven36-jx76q 2/2 Terminating 0 11s
devops-jenkins-jdk8-maven36-qn6p1 2/2 Terminating 0 21s
jenkins-0 1/1 Running 0 19d jenkins主节点
openjdk-16-hs0w6 2/2 Running 0 1s 单独起的openjdk-16
# kubectl -n devops exec -it openjdk-16-hs0w6 sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
Defaulting container name to openjdk-16.
Use 'kubectl describe pod/openjdk-16-hs0w6 -n devops' to see all of the containers in this pod.
sh-4.2# java -version
openjdk version "16.0.1" 2021-04-20
OpenJDK Runtime Environment AdoptOpenJDK-16.0.1+9 (build 16.0.1+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK-16.0.1+9 (build 16.0.1+9, mixed mode, sharing)
二、查找原因
首先我先看看是不是在我的agent oepnjdk-16 Node上执行的。我做了如下操作:
在Jenkins file中任意流水线步骤添加如下命令 sh "mkdir aaa" 运行查看是否在运行的根目录下有该文件夹 经确认存在该文件夹
既然是在agent上执行的,根据综合情况判断是jenkins默认使用openjdk-8来构建跟着maven版本走,并且根据下载地址可以确认版本。
在Jenkins控制台全局配置中添加:

在jenkins file中指定该版本工具,并在流水线中打印下版本信息 agent { label 'openjdk16' }
tools {
jdk 'oepnjdk-16'
}
sh "java -version"

总结

点👇分享

戳👇在看
文章转载自新钛云服,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。





