我有一个管道,它接受一个持久的字符串参数输入。然后,管道检查参数值是否存在于列表中。
问题是持久化的字符串是gstringimpl
类型,而列表项是java.lang.string
类型。当我使用.contains()
方法时,即使值在列表中,它也不会返回true
,我认为这是由于不同的数据类型。
我已经尝试了所有的在线,包括toString()
方法,但我不能让它工作。我把我的代码附在下面。
String ver = ""
pipeline {
agent {
docker{
image 'registry/abc/builder:0.1.5'
args '-t -d -v maven-m2-cache:/home/node/.m2'
}
}
parameters {
persistentString(name: 'Version', defaultValue: '8.4.7.8', description: 'Version to build', successfulOnly: false)
}
stages {
stage('Analyze Parameter'){
steps{
script{
ver = "${Version}".toString()
}
}
}
stage('Build'){
steps{
script{
def version_list1 = ['8.4.7.8','8.3.7.9','8.5.4.7']
if (version_list1.contains("${ver}")){
println("build version branch")
} else {
println("${ver}")
println("${ver}".getClass())
println(version_list1[0])
println(version_list1[0].getClass())
println("build master branch")
}
}
}
}
}
}
管道总是进入else块并输出以下内容:
8.4.7.8
类org.codehaus.groovy.runtime.GStringImpl8.4.7.8
以
构建主分支
不要使用字符串插值来解析参数。而是直接访问它,像params.PARAM_NAME
,下面的例子。
script{
def version_list1 = ['8.4.7.8','8.3.7.9','8.5.4.7']
if (version_list1.contains(params.Version)){
println("build version branch")
} else {
println("build master branch")
}
}