Jenkins Pipeline项目中无法使用when条件判断分支

93次阅读
没有评论

问题描述

在Jenkins Pipeline项目中想要使用when条件判断分支。他的Jenkinsfile如下所示:

stages {
    stage('Checkout project branch master') {
        steps {
            withCredentials([sshUserPrivateKey(credentialsId: 'credential', keyFileVariable: 'CREDENTIAL')]) {}
            git branch: 'develop', credentialsId: 'credential', url: 'git@bitbucket.org:user/demopipelinejenkinsfile.git'
        }
    }
    stage('develop') {
        steps {
            echo 'on branch develop'
        }
    }
    stage('any_branch') {
        environment {
            GIT_BRANCH = sh(returnStdout: true, script: 'git rev-parse --abbrev-ref HEAD').trim()
        }
        steps {
            echo "${env.GIT_BRANCH}"
        }
    }
}

控制台输出显示,阶段develop由于条件不满足而被跳过。然而,最后一个阶段仍然输出当前分支为”develop”。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

在Jenkins Pipeline项目中,可以使用when条件判断分支。以下是正确的用法:

stage('Deploy') {
    when {
        expression { env.GIT_BRANCH == 'origin/master' }
    }
    steps {
        // 执行部署操作
    }
}

请注意,这种用法只适用于声明式语法。
environment步骤用于”设置环境”,也就是在这里声明环境变量。
此外,在我的例子中,我没有自己声明GIT_BRANCH变量。但是,如果你使用checkout scm来检出你的代码库,Jenkins会将其作为环境变量(因此是env.GIT_BRANCH)。如果你想查看所有可用的环境变量,可以在一个步骤中执行以下命令:sh 'printenv'
你可以参考这篇文章了解更多信息:https://jenkins.io/blog/2017/01/19/converting-conditional-to-pipeline/

方案2

如果你不使用声明式语法,你可以尝试使用script块来实现条件判断。
以下是一个示例:

stage('Deploy') {
    steps {
        script {
            if (env.GIT_BRANCH == 'origin/master') {
                // 执行部署操作
            } else {
                echo 'Skipping deploy stage'
            }
        }
    }
}

在这个示例中,我们使用script块来编写条件判断。如果GIT_BRANCH等于origin/master,则执行部署操作;否则,输出”Skipping deploy stage”。
请注意,这种用法适用于脚本式语法。
以上是两种在Jenkins Pipeline项目中使用when条件判断分支的解决方案。根据你的具体需求和使用的语法,选择适合你的方案即可。

正文完