如何在声明性管道 Jenkins 中 select 多个 JDK 版本

How to select multiple JDK version in declarative pipeline Jenkins

我想在 Jenkins 声明式管道的不同阶段使用不同的 JDK 版本。在第一阶段我使用 Java 8. 在第二阶段我使用 Java 6. 如何在 Jenkins 的声明管道中 select 多个 JDK 版本?

  pipeline {
  agent any

  tools {
    jdk 'jdk_1.8.0_151'
    jdk 'jdk_1.6.0_45'
  }

  stages {
    stage('java 8') {
      steps {
        sh 'java -version'
        sh 'javac -version'
      }
    }
    stage('java 6') {
      steps {
        sh 'java -version'
        sh 'javac -version'
      }
    }
  }
}

来自Pipeline tools directive

tools: A section defining tools to auto-install and put on the PATH. 

The tool name must be pre-configured in Jenkins under 
Manage Jenkins → Global Tool Configuration.

来自pipeline-examples and cloudbess example

  pipeline {
  agent any

  tools {
    jdk 'jdk_1.8.0_151'
  }

  stages {
    stage('jdk 8') {
      steps {
        sh 'java -version'
        sh 'javac -version'
      }
    }
    stage('jdk 6') {
      steps {
        withEnv(["JAVA_HOME=${tool 'openjdk_1.6.0_45'}", "PATH=${tool 'openjdk_1.6.0_45'}/bin:${env.PATH}"]) {
          sh 'java -version'
          sh 'javac -version'
        }
      }
    }
    stage('global jdk') {
      steps {
        sh 'java -version'
        sh 'javac -version'
      }
    }
  }
}

如果您想要不同的 JDK 版本,我建议您为每个阶段使用不同的 docker 图像。您可以使用带有正确标签的 docker hub openjdk 图像来实现。 https://hub.docker.com/r/library/openjdk/

https://hub.docker.com/r/library/openjdk/tags/ 类似的东西:

pipeline {
agent none
stages {
    stage('openjdk:7-jdk') {
        agent {
            docker { image 'jdk7_image' }
        }
        steps {
            sh 'java -version'
        }
    }
    stage('java8') {
        agent {
            docker { image 'openjdk:8-jdk' }
        }
        steps {
            sh 'java -version'
        }
    }
}

}

您可以为每个阶段添加一个工具部分。

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'
                }
            }
       }
}