Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
管道作业中的多java版本使用_Java_Jenkins_Ant_Jenkins Pipeline_Devops - Fatal编程技术网

管道作业中的多java版本使用

管道作业中的多java版本使用,java,jenkins,ant,jenkins-pipeline,devops,Java,Jenkins,Ant,Jenkins Pipeline,Devops,我们已经将ant jar文件升级到51,需要检测java版本11,但我们的旧应用程序仍然使用旧jar文件50,因此我们需要根据pull请求id检测java版本。这里我们将PR id作为参数 stage("abc"){ steps{ script{ if (PR_ID == '100') tools{ jdk 'java11.0.5' } else tools{

我们已经将ant jar文件升级到51,需要检测java版本11,但我们的旧应用程序仍然使用旧jar文件50,因此我们需要根据pull请求id检测java版本。这里我们将PR id作为参数

stage("abc"){
        steps{ 
        script{
      if (PR_ID == '100')
      tools{
        jdk 'java11.0.5'
      }
      else
    tools{
        jdk 'java8'
    fi
      }  
我正在尝试这种方法,但得到了类似java.lang.NoSuchMethodError的错误:在步骤[ArtifactoryGradleBuild、MavendScriptorStep、addInteractivePromotion、archive、artifactoryDistributeBuild、artifactoryDownload、artifactoryEditProps]中找不到这样的DSL方法“工具”


请帮助我了解如何根据PR id使用if-else条件或任何其他条件来检测java版本。

A
tools
块仅允许在
管道
块或
阶段
块内使用,而不允许在
脚本
块内使用

我建议创建两个不同的阶段,并使用
when
选择要执行的阶段

stage("abc-java11") {
  when {
    expression {
      return PR_ID == '100'
    }
  }
  
  tools {
    jdk 'java11.0.5'
  }

  steps {
    // Your steps
  }
}

stage("abc-java8") {
  when {
    expression {
      return PR_ID != '100'
    }
  }
 
  tools {
    jdk 'java8'
  }

  steps {
    // Your steps
  }
}


谢谢Steenbeek,它工作得很好。但是我们有很多阶段。是否可以将它保留在管道的任何位置或管道之外,并应用于我们的所有阶段?我想这取决于项目的组织方式。我建议创建两个单独的脚本,每个工具版本一个,然后在作业配置级别规范中创建最好是:如果每个项目都有自己的repo,那么让每个项目指定自己的Jenkinsfile并将其添加到项目根目录中