2

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

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

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

有什么办法可以做到这一点?提前致谢 - 埃米尔

4

2 回答 2

2

您可以将所需的 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。

于 2021-08-24T15:49:23.397 回答
2

您可能不需要走 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。

于 2021-08-25T09:22:39.493 回答