带有值列表的Groovy Switch语句

Mac*_*icz 17 groovy jenkins-pipeline

我想在Jenkins管道作业中使用Switch语句.

def version = "1.2"
switch(GIT_BRANCH) {
  case "develop":
    result = "dev"
    break
  case ["master", "support/${version}"]:
    result = "list"
    break
  case "support/${version}":
    result = "sup"
    break
  default:
    result = "def"
    break
}
echo "${result}"
Run Code Online (Sandbox Code Playgroud)

GIT_BRANCH等于:

  • develop- 返回值是dev- 好的
  • master- 返回值是list- 好的
  • support/1.2- 返回值是sup- 为什么不list呢?

Dón*_*nal 28

我的猜测是,该类型GIT_BRANCH是一个String,而"support/${version}"一个GString.如果你将后者转换为String它应该工作:

def version = "1.2"
switch(GIT_BRANCH) {
  case "develop":
    result = "dev"
    break
  case ["master", "support/${version}".toString()]:
    result = "list"
    break
  case "support/${version}":
    result = "sup"
    break
  default:
    result = "def"
    break
}
echo "${result}"
Run Code Online (Sandbox Code Playgroud)

两种字符串类型之间的差异在将它们相互比较时无关紧要,但它可能对其他类型的比较很重要,例如在您的代码中,您隐式地将a GString与元素进行比较List.