Jenkins 管道中的正则表达式

标签 regex jenkins groovy jenkins-pipeline jenkins-groovy

我正在尝试创建一个只应为某些 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)
            ]
        }
    }

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

任何指导将不胜感激。

最佳答案

如果 env.GERRIT_PROJECTplatform/zapString.startsWith(str) 返回 true.

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

如果 env.GERRIT_PROJECT 由于某种原因为 null,为了避免 NPE,您可以使用 NPE 安全运算符 ?. 来调用 startsWith 方法.

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

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

关于Jenkins 管道中的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59386882/

相关文章:

c#-4.0 - 如何将这个 Groovy 函数转换为 C#?

grails - Groovy对象数组创建问题

grails - grails webflow错误

javascript - 无法将 search() 与可变模式一起使用

java - 通过 JsonPath 中的正则表达式过滤值

ubuntu - 打开的文件太多错误!安装很多插件后无法打开 Jenkins

deployment - 什么是构建管道的好工具?

java - 构造特定的正则表达式

regex - 脚本是否有一种非常简单的方法(从上下文中)判断 "her"是否是所有格代名词?

ssl - Jenkins 2 和 Atlassian Crowd(crowd2 插件)与双向 SSL 集成