groovy 在Jenkinsile中将gstringimpl转换为java.lang.string

voase2hg  于 2022-11-21  发布在  Jenkins
关注(0)|答案(1)|浏览(127)

我有一个接受持久字符串参数输入的管道。然后管道检查参数值是否存在于列表中。
问题是持久化的 stringgstringimpl类型,而列表项是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
在运行时环境中运行的代码
8.4.7.8
java.lang.string
建立主分支

doinxwow

doinxwow1#

不要使用字符串插值来解析参数。而是直接访问它,如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")                            
      }
}

相关问题