Jenkins管道中的正则表达式

时间:2019-12-18 06:56:35

标签: 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)
            ]
        }
    }

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

任何指导将不胜感激。

2 个答案:

答案 0 :(得分:3)

如果String.startsWith(str)true开头,则可以使用env.GERRIT_PROJECT返回platform/zap

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为空,则要避免NPE,可以使用NPE安全操作符?.来调用startsWith方法。

将Groovy的完全匹配运算符与regex结合使用的替代解决方案可能看起来像这样:

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

答案 1 :(得分:1)

https://jenkins.io/doc/book/pipeline/syntax/
分区环境:

  

环境
  当指定的环境变量执行阶段   设置为给定值,例如:当{环境名称:   'DEPLOY_TO',值:'production'}

也许这可以帮助您?