在单个脚本化管道中使用多个JDK

时间:2019-08-28 12:28:44

标签: jenkins jenkins-pipeline jenkins-groovy

在上述编译后的代码中,我们使用JDK1.7编译项目,而在声纳管道作业中使用JDK1.8。

是否可以在一个脚本作业中使用2个JDK。如果达到声纳级,则必须使用JDK 1.8。

当前,这是我们的管道。

node('jenkins_uat_sdg_1g'){

    env.JAVA_HOME="${tool 'JDK1.7_110'}"
    env.PATH="${env.JAVA_HOME}/bin:${env.PATH}"

    deleteDir()

    try{
        try{
            stage('SCM Code Checkout'){
                echo "Checking out source code from SVN..."
                echo "successfully checked out from SVN"
            }
        } catch(error){
            println("Unable to checkout...there were some errors!")
            currentBuild.result = "FAILURE"
            error()
        }
        try{
            stage('Compile & Package Generation'){
                echo "Begining to compile the code"
                bat label: 'build-maven', script: 'mvn -f pom.xml clean compile install'
                echo "Successfully compiled"
            }
        }catch(error){
            println("Unable to compile...there were some errors!")
            currentBuild.result = "FAILURE"
            error()      
        }

}

不同的管道脚本用于声纳分析。

node('jenkins_uat_sdg_1g'){

    env.JAVA_HOME="${tool 'JDK1.8'}"
    env.PATH="${env.JAVA_HOME}/bin:${env.PATH}"

    stage('SCM Code Checkout'){
                echo "Checking out source code from SVN..."
                echo "successfully checked out from SVN"
    }


    stage('sonarqube analysis'){
        withSonarQubeEnv('SonarServer'){
            bat label: 'sonar-analyis', script: '"D:/Apache Build Tools/apache-maven-3.6.1-bin/apache-maven-3.6.1/bin/mvn" org.sonarsource.scanner.maven:sonar-maven-plugin:3.6.0.1398:sonar -f parent/pom.xml -Dsonar.host.url=http://10.xx.xx.xx:9500 -Dsonar.login=xxxxxxxxxxxxxxxxxxxxxa4b4cf180c6'
        }
    }
}

stage('Quality Gate'){
    timeout(time: 5, unit: 'MINUTES'){
        def qg = waitForQualityGate()
        if(qg.status != 'OK'){
            error "Pipeline aborted due to quality gate failure: ${qg.status}"
        }
    }
}

是否可能有一个脚本在单个作业中使用两个JDK。

致谢

2 个答案:

答案 0 :(得分:1)

您可以使用withEnv步骤在一个块内设置一个或多个环境变量。这些可用于该范围内 内产生的任何外部进程

在不同阶段访问不同Java版本的情况下,以下代码对我有用:

node('slave1') {

    deleteDir()

    try {
        try {
            stage('During Build') {
                withEnv(['JAVA_HOME=/usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin']) {
                    sh '${JAVA_HOME}/java -version'
                    println("or whatever command you want to run in this block...")
                }
            }
        } catch(error) {
            println("Unable to find Java 7!")
            currentBuild.result = "FAILURE"
            error()
        }
        try {
            stage('During Sonar Analysis') {
                withEnv(['JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk.x86_64/bin']) {
                    sh '${JAVA_HOME}/java -version'
                    println("or whatever command you want to run in this block...")
                }
            }
        } catch(error) {
            println("Unable to find Java 8!")
            currentBuild.result = "FAILURE"
            error()
        }
    } catch(error) {
        println("Last catch block!")
        error()
    }
}

注意:正如您在上面已经注意到的那样,我们在Groovy中使用引号,因此变量扩展是由Bourne shell而不是Jenkins完成的

输出:

enter image description here

答案 1 :(得分:1)

我找到了 maven管道插件(withMaven),它解决了该问题。现在,我可以选择jdk 1.7进行编译,选择jdk 1.8进行声纳分析。

致谢

克里斯