管道作业中的多java版本使用
我们已经将ant jar文件升级到51,需要检测java版本11,但我们的旧应用程序仍然使用旧jar文件50,因此我们需要根据pull请求id检测java版本。这里我们将PR id作为参数管道作业中的多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{
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并将其添加到项目根目录中