Jenkinsfile分支设置时对模式的评估是什么?

c4s*_*4sh 9 jenkins devops jenkins-pipeline

我试图在阶段内的when语句上检测分支模式。

像这样:

stage('deploy to staging') {
agent label:'some-node'
when { branch "feature/*" }
steps {
    sh './deploy_pr.sh'
}
Run Code Online (Sandbox Code Playgroud)

}

如果我想要更复杂的模式怎么办?

我正在尝试检测诸如feature / 0.10.25之类的内容,并且以下模式不起作用:

when { branch 'feature/[0-9]+.[0-9]+.[0-9]+' }
Run Code Online (Sandbox Code Playgroud)

不起作用。根据https://regexr.com/,这是正确的正则表达式

c4s*_*4sh 8

好 !因此,通过错误堆栈跟踪,我发现在when-branch选项上,Jenkins与Ant样式模式进行了比较:https : //ant.apache.org/manual/dirtasks.html

这意味着它不希望使用正则表达式,而是更简单的东西,例如:

        */staging/*
Run Code Online (Sandbox Code Playgroud)

我通过使用when-expression选项来解决此问题,如下所示:

        when { 
            expression { BRANCH_NAME ==~ /feature\/[0-9]+\.[0-9]+\.[0-9]+/ }
        }
Run Code Online (Sandbox Code Playgroud)

这使用了如下所述的常规表达式:

https://www.regular-expressions.info/groovy.html

特别是,寻找==〜运算符的解释会很有帮助。

对于正则表达式本身,您可以在此处进行测试:

https://regexr.com/