1987WEB视界-分享互联网热门产品和行业

您现在的位置是:首页 > WEB开发 > 正文

WEB开发

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

1987web2023-10-06WEB开发82
当前容器化已经非常普及,无论是应用还是运维工具,绝大部分都已经官方支持容器化。而随着容器化的到来,一些新的问题也随之到来。例如:

当前容器化已经非常普及,无论是应用还是运维工具,绝大部分都已经官方支持容器化。而随着容器化的到来,一些新的问题也随之到来。例如:我们如何用不同的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包放在内网,下载地址使用内网地址。如果要运行其它开发语言的不同版本解决方法也是一样的。

云管理服务专家新钛云服 秦鸣原创

2.下载安装包后直接运行,进行选择安装路径,傻瓜式安装。

安装完成后,点Finished,弹出jekins输入密匙网页,根据网页提示路径

找到对应的jekins密匙输入后,选择推荐插件安装即可。(也可以不安装插件安装,后续用到插件后可以再安装也可以)

零基础也能看得懂:Jenkins配置python脚本定时任务过程图解

  • 下一篇

    在Windows上搭建配置Jenkins然后编译打包VS项目