K8S环境不同JAVA版本Jenkins编译构建实战!


新钛云服已为您服务1222

当前容器化已经非常普及,无论是应用还是运维工具,绝大部分都已经官方支持容器化。而随着容器化的到来,一些新的问题也随之到来。例如:我们如何用不同的JAVA版本来进行项目构建工作


背景需求

如果一家公司开发是第三方外包的,往往会面临开发使用的语言不同,同一开发语言的版本不同,而要做到统一开发语言和版本几乎是不可能的。使用不同的开发语言比较容易实现,但是同一开发语言的不同版本还是碰到了问题。

我遇到的问题是,指定了agent label为oepnjdk-16,但每次运行自动下载了oepnjdk-8,所以想使用不同JAVA版本的agent node节点去做编译工作在K8S环境下变的不那么容易

这个问题不解决,开发这边就无法使用Jenkins去做编译构建发布。因此,这个问题必须尽快解决。下面我就介绍下我的整个解决问题的过程。


解决问题过程

一、问题现象

在Jenkins file中配置为:

agent { label 'openjdk16' }

//添加一个暂停流水线步骤用于登录到pod中排查,否则启动的agent node用完会自动注销
stage("pause-01"){
            steps {
                input "Does the staging environment look ok?"
            }
        }

运行后打印的环境变量为:


可以从NODE_LABEL看到是openjdk-16,从JAVA_BASE_URL可以看到下载的是openjdk-8

从K8S登录到agent node执行如下命令:

# 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)

我们可以看到内置的java版本确实是openjdk-16的。

二、查找原因

首先我先看看是不是在我的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"
    

运行结果如下:

至此问题得以解决。


总结


所有的问题首先需要定位,然后基于它的运行原理去分析可能的原因。问题就很容易被解决。针对该问题后续如果有其它版本只需在全局配置增加并在jenkins file中指定即可。

好处是可以在一个agent镜像下运行不同版本的jdk,坏处是每次都要下载jdk,所以建议把下载的jdk包放在内网,下载地址使用内网地址。如果要运行其它开发语言的不同版本解决方法也是一样的。

了解新钛云服

重磅!新钛云服与木浪云正式达成战略联盟,两个盛斗士联合能擦出怎样的火花?

今晚8点半!新钛云服创始人携手重量级大咖,与您相约【A直播】

捷报!新钛云服斩获WRE「最佳云服务解决方案创新奖」

新钛云服荣膺第四届FMCG零售消费品行业CIO年会「年度数字化服务最值得信赖品牌奖」

新钛云服三周岁,公司月营收超600万元,定下百年新钛的发展目标

当IPFS遇见云服务|新钛云服与冰河分布式实验室达成战略协议

新钛云服正式获批工信部ISP/IDC(含互联网资源协作)牌照

深耕专业,矗立鳌头,新钛云服获千万Pre-A轮融资

新钛云服,打造最专业的Cloud MSP+,做企业业务和云之间的桥梁

新钛云服一周年,完成两轮融资,服务五十多家客户

上海某仓储物流电子商务公司混合云解决方案

往期技术干货

Kubernetes扩容到7,500节点的历程

低代码开发,全民开发,淘汰职业程序员!

国内主流公有云VPC使用对比及总结

万字长文:云架构设计原则|附PDF下载

刚刚,OpenStack 第 19 个版本来了,附28项特性详细解读!

Ceph OSD故障排除|万字经验总结

七个用于Docker和Kubernetes防护的安全工具

运维人的终身成长,从清单管理开始|万字长文!

OpenStack与ZStack深度对比:架构、部署、计算存储与网络、运维监控等

什么是云原生?

IT混合云战略:是什么、为什么,如何构建?

点????分享

戳????在看

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值