如何使用自定义 JDK 构建 Jenkins 项目?

How can I build Jenkins Projects with a custom JDK?

我有一个常规的 Jenkins 实例 运行 一些多分支管道。该实例在 JDK 11 上运行,因为 Jenkins 并不真正支持更高版本。没关系。

不过,有什么不好的是,我所有的管道似乎也因此被限制为 Java 11。 Jenkins 仅使用它自己也使用的 JDK 运行所有构建。但是,这并不好。

在这一点上,任何解决方案都可以,但理想情况下我只想让 两个 分开 JDKs: JDK 11,对于 Jenkins它本身和另一个 JDK 它会自动运行所有构建。

有什么办法可以实现吗?提前致谢 - Emil

您可以将所需的 JDK 与 docker agent 一起使用。 有了这个,您可以定义一个图像,它使用适当的 JDK 或任何图像。

例如,在您的情况下,您可以为 jenkins 本身设置 JDK 11,并在每项工作中使用您想要的。以 openjdk 为例:

pipeline {
    agent {
        docker { image 'openjdk:11' }
    }
    stages {
        stage('Test java version') {
            steps {
                sh 'java -version'
            }
        }
    }
}

您可以选择tag您想要select合适的版本。

您只需要在您的 jenkins 实例中设置 docker。

您可能不需要走 docker 代理路线,尤其是您 JDK 没有图像。

JDK 用于 JENKINS 本身

当您 运行 Jenkins 时,它 运行 在您指定的 Java 上,通常是命令行上可用的内容(即:java -jar jenkins.war)。

启动标准 linux 代理时(SSH Build Agents (aka:ssh-slaves) plugin), by default agents launch using the available JDK/JRE. However, the plugin also allows you to specify a custom JavaPath and runtime options

以上是“默认”或“系统”JDK 可用于代理上的作业和步骤 运行。请注意,Jenkins 2.x 仅支持 Java 8 and Java 11. Java 11 is supported in Jenkins 2.164.1 and as of the August releases,Docker 控制器(主)图像默认使用 Java 11,如前所述:

Jenkins 2.306 running as jenkins/jenkins:latest uses Java 8. When Jenkins 2.307 or later is run with jenkins/jenkins:latest, it will use Java 11

Jenkins 2.289.3 running as jenkins/jenkins:lts uses Java 8. When Jenkins 2.303.1 or later is run with jenkins/jenkins:lts, it will use Java 11

JDK JENKINS 工作

Jenkins 允许多种工具,包括 jdk、NodeJS、Docker、ant、gradle、maven 等版本可用于您的构建。它们必须在 Manage Jenkins → Global Tool Configuration ( ${JENKINS_URL}/configureTools/ ).

下进行预配置

Jenkins "Managing Tools" documentation is lacking at this time, and the Pipeline documentation provides an limited explanation. Cloudbees explains a bit more. This old ,包括经常被忽视的“JDK”[默认(系统)],位于“常规”的末尾" 你工作的一部分。

配置全局默认值后,还有一个选项可以覆盖每个节点级别的各种实例的默认位置,如本 中所述。

无论选择什么选项,都会覆盖可用于作业步骤的 JAVA_HOME(ANT_HOME、M2_HOME 等)(作业覆盖节点覆盖全局)。对于管道作业,您可以在管道块或阶段块内使用“tools”选项指定,例如:

tools {
    jdk 'jdk1.8' 
}

我们有多个版本 (7/8/11) 的 Oracle JDK、JRockit、OpenJDK Hotspot 和 OpenJ9,并使用节点级别工具安装来覆盖安装路径,例如在 Win 机器上。

还有 extra / custom 工具安装程序插件,可将这种灵活的工具管理扩展到其他工具。

为了完整性,您还可以使用 Environment Injector 插件覆盖环境变量,包括 JAVA_HOME 用于整个作业或从特定步骤开始。