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

时间:2017-12-19 21:47:37

标签: jenkins groovy jenkins-declarative-pipeline

我想在Jenkins声明性管道中为不同的阶段使用不同的JDK版本。在第一阶段,我使用的是Java 8.在第二阶段,我使用的是Java 6.如何在Jenkins的声明性管道中选择多个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'
      }
    }
  }
}

3 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:5)

如果您想拥有不同的JDK版本,我建议您为每个阶段使用不同的泊坞窗图像。您可以使用具有正确标记的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'
        }
    }
}

}

答案 2 :(得分:2)

来自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-examplescloudbess 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'
      }
    }
  }
}