通过检查Jenkinsfile中的子字符串来有条件地运行Jenkins管道阶段

时间:2018-04-20 22:03:55

标签: jenkins continuous-integration jenkins-pipeline jenkins-blueocean

  

Jenkinsfile中应该使用什么语法来根据被检出的分支的名称是否包含特定的子字符串来有条件地运行某个阶段?

例如,如果分支名称包含字符" bottom-level-branch",则只能运行一个阶段。然后,该阶段将针对各种分支运行,例如:

bottom-level-branch-1  
bottom-level-branch-2  
bottom-level-branch-3  

另一个阶段只有在分支名称包含字符"中级分支"时才会运行。然后,这个其他阶段将针对各种其他分支运行,例如:

middle-level-branch-1  
middle-level-branch-2  
middle-level-branch-3  

以下示例过于严格,因为它严格匹配字符串相等而不是检查子字符串:

    stage('Deploy Bottom Level Branch') {
        when {
            branch 'bottom-level-branch'
        }
        steps {
            sh './jenkins/scripts/some-script.sh'
        }
    }
    stage('Deploy Middle Level Branch') {
        when {
            branch 'middle-level-branch'
        }
        steps {
            sh './jenkins/scripts/some-script.sh'
        }
    } 

2 个答案:

答案 0 :(得分:0)

您可以执行类似(未尝试)的操作

when { 
    expression { 
        return env.BRANCH_NAME.contains('bottom-level-branch') 
    }
}

Syntax Definition

答案 1 :(得分:0)

您可以使用默认模式匹配来指定分支名称。对于您提到的具体示例,您可以尝试这样的事情。

stage('Deploy Bottom Level Branch') {
    when {
        branch 'bottom-level-branch-*'
    }
    steps {
        sh './jenkins/scripts/some-script.sh'
    }
}

有关更多示例,请参阅此处的文档:https://jenkins.io/doc/book/pipeline/syntax/#when