将refspec设置为:+refs/tags/*:refs/remotes/origin/tags/*
分支指定符:**
在构建触发器下,勾选“当有变更推送到GitHub时构建”。
“新标签”是什么意思?它有一些模板名吗?
你肯定可以在 高级 --> Refspec --> refs/tags/{标签名称}
中定义它。
你甚至可以使用 refs/tags/*
来查找任何新标签。
+refs/tags/*:refs/remotes/origin/tags/*
,我的分支是*/tags/*
,当然你会每隔N分钟(我设为5)添加SCM轮询。之后你会得到什么? - Stan Egit describe --tags
作为 shell 命令,并从 Git 中获取最新的标签。然后,您将标签写入某个属性文件中(用于保存已经运行了该标签的任务),并轮询另一个流,在其中传递标签名称并进行构建。 - Stan EPrevious方法对我不起作用,我的情况下需要在单引号中使用refspec:
Refspec:'+refs/tags/*':'refs/remotes/origin/tags/*' Branch Specifier:**/tags/**
我使用的是Jenkins 2.120. 要使由标签触发的作业正常工作,需要执行以下步骤:
创建作业:
Refspec:'+refs/tags/*':'refs/remotes/origin/tags/*'
Branch Specifier:**/tags/**
运行构建
重新配置相同的作业参数为:
Refspec:'+refs/tags/*':'refs/remotes/origin/tags/*'
Branch Specifier:**
运行构建
重新配置相同的作业参数为:
Refspec:'+refs/tags/*':'refs/remotes/origin/tags/*' Branch Specifier:**/tags/**
运行构建
只有完成这些神奇的步骤后,当我给分支打上标签时它才会自动触发Jenkins。
+refs/tags/v*:refs/remotes/origin/tags/v*
Branches to build > Branch Specifier (blank for 'any') **/tags/v*
如果您想构建以v开头的标签,例如v0.1.0、v1.0.5等,请设置v*。buildingTag - A simple condition that just checks if the Pipeline is running against a tag in SCM, rather than a branch or a specific commit reference.
@albertski的答案是正确的,但不要忘记以下额外设置: 1. 从Bitbucket设置钩子到Jenkins 2. 需要检查轮询SCM
您可以通过从bitbucket存储库中的提交添加新的git标签来测试触发器。
我之前遇到了一个问题,因为我勾选了“删除工作区”,但是构建需要一个现有的工作区来进行比较。所以我按照以下步骤操作:
'+refs/tags/*':'refs/remotes/origin/tags/*'
refs/tags/{A SPECIFIC TAG}
refs/tags/**
现在应该可以正常工作了。
您需要注意日志中的消息是Multiple candidate revisions
,这意味着当Git从远程获取并应用分支规范时,存在多个匹配项,因此它只选择列表中的第一个。
stage('Deploy') {
when { buildingTag() } // only execute this stage on tags
steps {
// pass tag name to my fancy deployment script
pwsh '.deploy.ps1 -release_name $env:TAG_NAME'
}
}
**
。让我解释一下原因:如果你提交了一个提交,然后Jenkins作业轮询了仓库,然后你打了标签...Jenkins不会检测到更改。如果你将分支指定器留为空,然后执行相同的过程,即使没有引入新的提交,你的新标签也将被检测到。所以,用户"albertski"几乎给出了正确的答案,只需在"tags/"之后添加星号。 - Antebiosmain
分支,然后将另一个提交推到release/0.1
分支,然后将第一个提交打上v1.0.1
的标签并推送;这个任务会触发并检出release/0.1
分支上的提交。据我所知,期望的行为是不可能实现的。 - Bracken