首页 > 解决方案 > 在 groovy 管道中,如何在 switch case 中添加模式?

问题描述

我是初学者,试图在 groovy 管道中使用开关盒。我已经定义了参数

  1. ENV(选择参数),值为 test1、test2、test3、prod1、prod2、prod3
  2. DISPLAY(主动无功参数),参考参数为 ENV

switch("$ENV") { case "test*": return ['True'] break case "prod*": return ['False'] break default: return ['Error in env selection'] break }

当我给出 test1 时,它工作得很好,而当我给出模式“test*”时,代码输出不符合预期。

请帮助我解决问题。

先感谢您。

标签: jenkinsgroovyjenkins-pipelinejenkins-groovy

解决方案


您在正则表达式模式匹配中有错误,请参阅下面的解决方案。
但是,使用 switch 是很老的习惯,只是因为向后兼容而保留在语言中。可能在现代 Groovy 中,您永远不会看到开关。我添加了第二个解决方案,我将如何解决这个问题。

ENV = "prod1"

// classic solution using swtich
def SelectSwitch(value) {
    switch(value) {
        case ~/test.*/:  return 'True'
        case ~/prod.*/:  return 'False'
        default:         return 'Error in env selection'
    }
}

assert SelectSwitch(ENV) == 'False'

// modern approach using a map
def SelectMap(value) {
    ['test.*': 'True', 'prod.*': 'False' ]
        .find { value ==~ it.key }
        ?.value
        ?: 'Error in env selection'
}

assert SelectMap(ENV) == 'False'


推荐阅读