Jenkins 管道中的正则表达式

Rob*_*ert 3 regex groovy jenkins jenkins-groovy jenkins-pipeline

我正在尝试创建一个仅应为某些 Gerrit 项目运行的 Jenkins 管道步骤。特别是对于变量 GERRIT_PROJECT 以“platform/zap”开头的所有项目。遗憾的是,我缺乏 Groovy 技能。

这是我到目前为止得到的:

stage ('zap') {
        when {
            expression {
                isMatch = env.GERRIT_PROJECT =~ /^platform\/zap/
                return isMatch
            }
        }
        steps {
            build job: 'Zap', parameters: [
                string(name: 'ZAP_PROJECT', value: env.GERRIT_PROJECT)
            ]
        }
    }
Run Code Online (Sandbox Code Playgroud)

换句话说,阶段应该为“platform/zap/os”而不是“app/hello”执行。

任何指导将不胜感激。

Szy*_*iak 5

如果以.开头,您可以使用String.startsWith(str)该返回值。trueenv.GERRIT_PROJECTplatform/zap

stage ('zap') {
    when {
        expression {
            env.GERRIT_PROJECT?.startsWith("platform/zap")
        }
    }
    steps {
        build job: 'Zap', parameters: [
            string(name: 'ZAP_PROJECT', value: env.GERRIT_PROJECT)
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

为了避免 NPE ifenv.GERRIT_PROJECT由于某种原因为 null,您可以使用 NPE-safe 运算符?.来调用startsWith方法。

使用 Groovy 的精确匹配运算符和正则表达式的替代解决方案可能如下所示:

stage ('zap') {
    when {
        expression {
            env.GERRIT_PROJECT ==~ /^platform\/zap(.*)$/
        }
    }
    steps {
        build job: 'Zap', parameters: [
            string(name: 'ZAP_PROJECT', value: env.GERRIT_PROJECT)
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)