如何在Jenkins声明式流水线中仅构建Git标签时执行指定步骤
在Jenkins声明式流水线中仅针对Git标签执行特定逻辑
搞定这个需求其实很简单!Jenkins虽然没有像Travis CI那样直接提供tags: true的专属条件,但我们可以利用标签构建时的特性轻松实现等效效果。下面是两种最常用、最靠谱的方案:
方案一:用TAG_NAME环境变量判断(推荐)
当Jenkins构建Git标签时,会自动给我们设置一个叫TAG_NAME的环境变量(值就是标签的名字),而普通分支构建时这个变量是不存在的。我们只需要在when块里检查这个变量是否存在就行:
pipeline { agent any stages { stage('常规构建') { steps { // 这里放你的日常构建步骤:编译、跑测试啥的 echo "正在构建项目..." } } stage('发布到生产') { // 只有标签构建才会进入这个阶段 when { expression { env.TAG_NAME != null } } steps { // 这里写你的发布逻辑:推镜像、部署集群、发通知等等 echo "正在发布标签 ${env.TAG_NAME} 到生产环境..." } } } }
如果想更严谨,只允许符合特定格式的标签触发发布(比如只认v1.0.0这种版本号标签),可以给表达式加个正则匹配:
when { expression { env.TAG_NAME != null && env.TAG_NAME ==~ /v\d+\.\d+\.\d+/ } }
方案二:通过变更日志匹配标签提交(特殊场景用)
如果你的标签提交有特定的日志格式(比如提交信息里带[tag]标识),也可以用changelog条件来匹配,不过这种方法不如第一种直接,适合小众场景:
stage('发布到生产') { when { changelog '^\\[tag\\]' } steps { echo "通过标签提交触发发布..." } }
小提醒
- 记得在Jenkins项目的Git配置里,勾选**"Fetch tags"**(在SCM配置的高级选项里),不然Jenkins识别不到标签构建,
TAG_NAME变量也不会生成。 - 如果是手动触发构建,要选择"Tag"选项并输入标签名,这样
TAG_NAME才会被正确赋值。
这样就完美实现了你要的效果——只有构建Git标签时,才会执行发布这类特定逻辑。
内容的提问来源于stack exchange,提问作者vossad01
相关产品推荐
相关产品推荐

