jenkins - 如何在声明性管道 Jenkins 中选择多个 JDK 版本
jdk11版本jenkins打包jdk8项目,同时兼容jdk11与jdk8
Jenkins如何在声明式Pipeline中指定JDK版本
背景说明
docker 安装的 Jenkins JDK 版本为 1.8,将 maven 挂载进 Jenkins docker 中使用,maven 将会调用默认的 JDK1.8 来构建:
1 2 3 4 5 6
| $ mvn -version Apache Maven 3.8.8 (4c87b05d9aedce574290d1acc98575ed5eb6cd39) Maven home: /usr/local/maven Java version: 1.8.0_272, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.272.b10-1.el7_9.x86_64/jre Default locale: en_US, platform encoding: UTF-8 OS name: "linux", version: "3.10.0-1160.71.1.el7.x86_64", arch: "amd64", family: "unix"
|
而项目上使用的是高版本 Amazon Corretto JDK11,我们需要让 maven 使用 JDK11 来构建项目。
宿主机挂载二进制进 Jenkins 容器
参考 Jenkins 的 Compose 编排,将两者挂载进 Jenkins 容器使用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| $ vim docker-compose.yml version: '3' services: jenkins: image: jenkins/jenkins:2.263.1-lts-centos7 container_name: jenkins restart: always working_dir: /var/jenkins_home ports: - 8080:8080 - 50000:50000 environment: - TZ=Asia/Shanghai - LANG=en_US.UTF-8 - PATH=$PATH volumes: - /etc/timezone:/etc/timezone - /data/jenkins/jenkins_backup:/data/backup/jenkins - /data/jenkins/jenkins_home:/var/jenkins_home - /data/jenkins/jenkins_home:/data/jenkins_home - /usr/bin/docker:/usr/bin/docker - /var/run/docker.sock:/var/run/docker.sock - /usr/local/jdk11:/usr/local/jdk11 - /usr/local/maven:/usr/local/maven
|
别名 JDK11
全局工具配置,JDK 下新增一个 JDK,设置其别名为 jdk11
,JAVA_HOME
路径与挂载位置对应:

Pipeline 自定义 JDK 版本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| pipeline { agent any
tools { jdk 'jdk11' }
stages { stage('mvnBuild'){ steps { script { sh """ java -version mvn -version """ } } } } }
|
验证:

定义多个 JDK 版本
jenkins - 如何在声明性管道 Jenkins 中选择多个 JDK 版本
当然也可以分别在不同阶段去使用不同的 JDK 版本来完成构建任务。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| pipeline { agent any
stages { stage ("first") { tools { jdk "jdk-1.8.101" } steps { sh 'java -version' } } stage("second"){ tools { jdk "jdk-1.8.152" } steps{ sh 'java -version' } } } }
|