3 回答
更新:从管道模型定义插件的 1.2.8 版开始, 您现在可以使用buldingTag()
:
stage('Deploy') {
when {
buildingTag()
}
steps {
echo 'Replace this with your actual deployment steps'
}
}
使用Multibranch Pipeline配置时,您可以使用expression
条件以及TAG_NAME
底层Branch API Plugin提供的环境变量。不幸的是,您无法直接检查环境变量是否在 Groovy 级别(API 限制)定义,因此您必须在 shell 中进行测试:
stage('Deploy') {
when { expression { sh([returnStdout: true, script: 'echo $TAG_NAME | tr -d \'\n\'']) } }
steps {
echo 'Replace this with your actual deployment steps'
}
}
以上利用了 Groovy 中非空字符串的真实性。
在未来的版本中可能会引入更简单的方法。请参阅jenkinsci/pipeline-model-definition-plugin#240。
我有一个类似的情况,我通过获取分支名称来处理,如果是标签refs/tags/v101.0.0-beta8468
,那么你必须提取/解析它以检查它是否是一个标签,否则它只是分支名称pipeline
。例如。
if(env.gitlabBranch.contains("tags"))
{
isTag = true
echo "----------------true----------------"
branch = env.gitlabBranch.split("/")[2]
imageTag = branch
}
else
{
branch = "origin/$env.gitlabBranch"
}
并在 chekout 步骤中提到分支为
branches: [[name: "${branch}"]
如果您想从同一个项目中结帐。根据 isTag 变量,您可以选择运行某个阶段。喜欢:
if(isTag) {
stage('Deploy') {
// your logic here
}
将您的 isTag 初始化为 false :)
声明性管道
仅在为 Tag 构建时执行 STAGE
对于整个阶段,@vossad01 已经提供了buildingTag()
在when
like中使用的答案
stage('Deploy') {
when {
buildingTag()
beforeAgent true
}
steps {
echo 'deploy something when triggered by tag
}
}
这beforeAgent true
是可选的,并确保在代理上执行之前检查条件。
仅在为 Tag 构建时执行 STEP
如果它只是一个阶段中的一个步骤,应该以标签为条件,您可以在script
块内使用 Groovy 语法(如在脚本化管道中使用的),如下所示。
stage('myStage') {
steps {
echo 'some steps here that should always be executed'
script {
if (env.TAG_NAME) {
echo "triggered by the TAG:"
echo env.TAG_NAME
} else {
echo "triggered by branch, PR or ..."
}
}
}
}
为标签构建的附加提示
您可能还对能够在推送标签时触发构建的basic-branch-build-strategies-plugin感兴趣(默认情况下不启用)。请参阅此处了解如何使用它。您可以通过Manage Jenkins
-> Manage Plugins
->安装它Available tab
,然后使用搜索栏。