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标签”博客文章 。

  1. 确保使用git push --tags将标签git push --tags远程存储库
  2. 在工作的“Git Repository”部分,在“源代码pipe理”标题下,点击“高级”。
  3. 在Refspec的字段中,添加以下文本: +refs/tags/*:refs/remotes/origin/tags/*
  4. 在“分支构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及以上)的最新版本中,您可以:

  1. 只需在“分支build立”字段中指定标签的名称即可。
  2. 在参数化版本中,您可以使用参数作为variables在同一个字段'分支build立'即$ {Branch_to_build}。
  3. 你可以安装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