我有一个使用一些多分支管道运行的常规 Jenkins 实例。该实例在 JDK 11 上运行,因为 Jenkins 并不真正支持更高版本。没关系。
但不好的是,我所有的管道似乎也被限制为 Java 11。Jenkins 只是使用它自己使用的 JDK 运行所有构建。不过,这并不好。
在这一点上,任何解决方案都可以,但理想情况下,我只想拥有两个单独的 JDK:JDK 11,用于 Jenkins 本身和另一个 JDK,它会自动运行所有构建。
有什么办法可以做到这一点?提前致谢 - 埃米尔
我有一个使用一些多分支管道运行的常规 Jenkins 实例。该实例在 JDK 11 上运行,因为 Jenkins 并不真正支持更高版本。没关系。
但不好的是,我所有的管道似乎也被限制为 Java 11。Jenkins 只是使用它自己使用的 JDK 运行所有构建。不过,这并不好。
在这一点上,任何解决方案都可以,但理想情况下,我只想拥有两个单独的 JDK:JDK 11,用于 Jenkins 本身和另一个 JDK,它会自动运行所有构建。
有什么办法可以做到这一点?提前致谢 - 埃米尔
您可以将所需的 JDK 与docker agent一起使用。有了这个,您可以定义一个使用适当的 JDK 或任何图像的图像。
例如,在您的情况下,您可以拥有 jenkins 本身的 JDK 11 以及您在每项工作中想要的那个。以 openjdk 为例:
pipeline {
agent {
docker { image 'openjdk:11' }
}
stages {
stage('Test java version') {
steps {
sh 'java -version'
}
}
}
}
你可以选择你想要的标签来选择合适的版本。
您只需要在您的 jenkins 实例中设置 docker。
您可能不需要走 docker 代理路线,尤其是您的特定 JDK 没有图像。
JENKINS 本身的 JDK
当您运行 Jenkins 时,它会在您指定的 Java 上运行,通常是命令行上可用的(即:)java -jar jenkins.war
。
当您启动标准 linux 代理(SSH Build Agents (aka:ssh-slaves)插件)时,默认情况下代理使用可用的 JDK/JRE启动。但是,该插件还允许您指定自定义JavaPath 和运行时选项。
以上是代理上运行的作业和步骤可用的“默认”或“系统”JDK。请注意,Jenkins 2.x 仅支持Java 8 和 Java 11。Jenkins 2.164.1 支持 Java 11,从8 月版本开始,控制器(主)的 Docker 映像默认使用 Java 11,如下所述:
作为 jenkins/jenkins:latest 运行的 Jenkins 2.306 使用 Java 8。当使用 jenkins/jenkins:latest 运行 Jenkins 2.307 或更高版本时,它将使用 Java 11
作为 jenkins/jenkins:lts 运行的 Jenkins 2.289.3 使用 Java 8。当使用 jenkins/jenkins:lts 运行 Jenkins 2.303.1 或更高版本时,它将使用 Java 11
JENKINS 工作的 JDK
Jenkins 允许为您的构建提供多种工具,包括 jdk、NodeJS、Docker、ant、gradle、maven 等版本。它们必须在Manage Jenkins → Global Tool Configuration ( ${JENKINS_URL}/configureTools/
)下进行预配置。
目前缺少 Jenkins “管理工具”文档,流水线文档提供了有限的解释。Cloudbees解释了更多。这个旧的S/O 答案解释了基础知识,包括经常被忽视的“ JDK ”[默认(系统)],位于您工作的“常规”部分的末尾。
配置全局默认值后,还有一个选项可以覆盖每个节点级别上各种实例的默认位置,如此S/O 答案中所述。
无论选择什么选项,都会覆盖可用于您的作业步骤的 JAVA_HOME(ANT_HOME、M2_HOME 等)(作业覆盖节点覆盖全局)。对于管道作业,您可以指定使用管道块或阶段块内的“工具”选项,例如:
tools {
jdk 'jdk1.8'
}
我们有多个版本 (7/8/11) 的 Oracle JDK、JRockit、OpenJDK Hotspot 和 OpenJ9,并使用节点级工具安装来覆盖安装路径,例如在 Win 框上。
还有额外的/自定义的工具安装插件,可以将这个灵活的工具管理扩展到其他工具。
为了完整起见,您还可以使用Environment Injector插件覆盖环境变量,包括整个作业或从特定步骤开始的 JAVA_HOME。