15

我想在 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'
      }
    }
  }
}
4

3 回答 3

27

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

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'
                }
            }
       }
}
于 2018-01-21T15:38:07.143 回答
6

如果您想拥有不同的 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'
        }
    }
}

}

于 2017-12-21T10:19:45.070 回答
5

管道工具指令

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.

管道示例cloudbess 示例

  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'
      }
    }
  }
}
于 2017-12-19T22:29:38.380 回答