问题描述
在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
条件判断分支的解决方案。根据你的具体需求和使用的语法,选择适合你的方案即可。
正文完