jenkinsGit插件:如何build立特定的标签?
我有问题让jenkinsbuild立一个指定的标签。 标签是参数化构build的一部分,但我不知道如何将其传递给git插件来构build标签。 这已经花了我3个小时的时间,我已经承认击败堆栈溢出的主人。
我将Advanced-> Refspec字段设置为refs/tags/[your tag name]
。 这似乎比其他Refspec的其他build议更简单,但它对我来说工作得很好。
更新23/7/2014 – 事实上,经过进一步的testing,事实certificate这没有按预期工作。 看来,HEAD版本仍然被检出。 请将其作为接受的答案撤消。 在这个主题中 (3月30日),我从gotgenes的post中得到了一个可行的解决scheme。 这个post中提到的不必要的构build触发这个问题对我来说不是问题,因为我的工作是由上游工作触发的,而不是来自SCM的投票。
我能够通过使用“分支build立”参数来做到这一点:
Branch Specifier (blank for default): tags/[tag-name]
用标签名称replace[tag-name]。
使用Jenkins CI v.1.555,Git Client插件v.1.6.4和Git插件2.0.4,这些答案都不足以满足我的需求。
我想要为一个特定的固定(即非参数化)标签构build一个Git存储库。 我不得不拼凑出各种答案的解决scheme,再加上Thilo引用的“构buildGit标签”博客文章 。
- 确保使用
git push --tags
将标签git push --tags
远程存储库 - 在工作的“Git Repository”部分,在“源代码pipe理”标题下,点击“高级”。
- 在Refspec的字段中,添加以下文本:
+refs/tags/*:refs/remotes/origin/tags/*
- 在“分支构build”,“分支说明符”下,放置
*/tags/<TAG_TO_BUILD>
(用您的实际标签名称replace<TAG_TO_BUILD>
)。
为我添加Refspec变得非常重要。 虽然看起来git仓库在默认情况下是在默认情况下获取所有的远程信息,但Git插件仍然无法find我的标签。 只有当我在Refspec字段中明确指定“获取远程标签”时,Git插件才能从我的标签中识别和构build。
更新2014-5-7 :不幸的是,这个解决scheme确实对Jenkins CI(v.1.555)和Git存储库推送通知机制Stash Webhook带来了Jenkins的不良副作用 :任何时候存储库上的任何分支都会被更新在推动中,标签build立作业也将再次启动。 这会导致许多不必要的重复构build相同的标记作业。 我已经尝试使用和不使用“使用工作区强制轮询”选项来configuration作业,而且似乎没有任何作用。 我可以防止Jenkins为标记作业做不必要的构build的唯一方法是清除Refspec字段(即,删除+refs/tags/*:refs/remotes/origin/tags/*
)。
如果有人find更优雅的解决scheme,请使用更新编辑此答案。 例如,我怀疑,如果refspec特别是+refs/tags/<TAG TO BUILD>:refs/remotes/origin/tags/<TAG TO BUILD>
而不是星号。 然而,现在,这个解决scheme正在为我们工作,在作业成功之后,我们只是删除额外的Refspec。
难道你不能告诉jenkins从Ref名字build立? 如果是这样的话
refs/tags/tag-name
从所有关于Jenkins和Hudson的问题中,我都build议转换到TeamCity。 我没有编辑任何configuration文件来让TeamCity工作。
我做了这样的事情,它的工作:
Source Code Management Git Repositories Advance Name: ref Refspec : +refs/tags/*:refs/remotes/origin/tags/* Branches to build Branch Specifier (blank for 'any') : v0.9.5.2
jenkins日志证实,它是从标签获得源
检出版本0b4d6e810546663e931cccb45640583b596c24b9
(v0.9.5.2)
我可以通过设置Refspec和Branch Specifier来让Jenkins构build一个标签, 详见本博客文章 。
我还必须设置知识库名称(在我的情况下“为”起源“),以便我可以在Refspec中引用它(否则它显然会使用随机生成的名称)。
在jenkins(1.639及以上)的最新版本中,您可以:
- 只需在“分支build立”字段中指定标签的名称即可。
- 在参数化版本中,您可以使用参数作为variables在同一个字段'分支build立'即$ {Branch_to_build}。
- 你可以安装Git Parameter Plugin ,它将通过列出所有可用的分支和标签来为你提供function。
如果您正在使用Jenkinspipe道,并想要签出特定的标签(例如:您的版本的TAG
参数),则可以执行以下操作:
stage('Checkout') { steps { checkout scm: [$class: 'GitSCM', userRemoteConfigs: [[url: 'YOUR_GIT_REPO_URL.git', credentialsId: 'YOUR_GIT_CREDENTIALS_ID' ]], branches: [[name: 'refs/tags/${TAG}']]], poll: false } }
我最后做的是:
- 创build了一个新的分支
jenkins-target
,并得到jenkins追踪 - 从我想要build立的任何分支或标签合并到
jenkins-target
- 一旦构build工作,testing传递等,只需简单地从
jenkins-target
分支创build一个标签
我不确定这是否适用于所有人,我的项目很小,没有太多的标签和东西,但它很容易做,不必乱用refspecs和参数和东西:-)
您甚至可以使用通配符构build标签types,例如1.2.3-alpha43
:
Refspec: +refs/tags/*:refs/remotes/origin/tags/*
分支说明符: origin/tags/1.2.3-alpha*
你也可以勾选“ build立当更改被推送到GitHub ”来触发推送,但你必须添加“创build”行动到webhook