如果发布新标记,jenkins会触发构建

Kin*_*one 48 tags git jenkins

我想配置jenkins,以便在git存储库的任何分支中发布新标记时开始构建.如何配置此行为?

我是jenkins的新人,请原谅我,如果这可能是一个非常基本的问题,但我找不到自己.

git jenkins配置

触发: 构建触发器

谢谢你的帮助

alb*_*ski 27

将refspec设置为: +refs/tags/*:refs/remotes/origin/tags/*

分支说明符: **

在构建触发器下,检查将更改推送到GitHub时的构建

  • 我的立场是正确的:分支说明符必须为`**`。让我解释一下原因:如果您进行了提交,则Jenkins的工作轮询了回购,然后您标记了……Jenkins将无法检测到更改。如果您将分支说明符保留为**,然后执行相同的过程,那么即使未引入新的提交,也将检测到您的新标记。因此,用户“ albertski”几乎有正确的答案,只需在“ tags /”之后添加ASTERISK。 (2认同)
  • 这不是一个可靠的答案,每次推送任何分支或创建标签时,它都会触发构建。但它只会检查存储库中最近的提交,无论是否已标记。例如:如果您将提交推送到分支“main”,那么您将另一个提交推送到分支“release/0.1”,然后将“main”上的第一个提交标记为“v1.0.1”并推送该标记;该作业将触发并检查“release/0.1”上的提交。据我所知,想要的行为是不可能的。 (2认同)

Sta*_*n E 20

新标签是什么意思?它有一些模板名称吗?

您可以在Advanced - > Refspec - >中定义它refs/tags/{tagname}.

你甚至可以refs/tags/*找到真正的新标签.

在此输入图像描述

  • 是的,明白了.仅在新代码持续存在时才会在轮询后触发Git.这是该插件的主要规则,因此无法仅使用git插件进行解决方法.我可以建议你的事情就是完成两项任务.第一项任务每N分钟运行一次,只需使用控制台即可.您正在执行`git describe --tags`作为shell命令并从git获取最新的标记.然后,您将在一些属性文件中编写标记(用于保存已经为该标记运行的任务)并轮询另一个流,您将在其中传递标记名称并构建它. (4认同)
  • 好吧,我发现如果我不对源代码进行任何更改,詹金斯将不会开始构建标签,即使它是最新版本。但在我们的例子中,即使源没有变化,也有必要触发构建。如果创建了新标签,詹金斯无论如何都应该构建它。 (2认同)

小智 7

请注意,stanjer提供的答案中的方法不会使Jenkins触发基于新标签的构建,前提是它们指向以前构建的提交。例如,您标记版本v1.0.0(以使jenkins部署此版本),然后在将来您必须回滚到v1.0.0,再次标记其提交,但是使用v1.0.0-rollback,Jenkins将不会部署您的版本。回滚,因为它将检查标签指向的哈希,而不是标签本身的哈希。

总而言之,jenkins仅在指向尚未被标记的提交时才构建新标记,并且当前无法对其进行调整。

如果可以将Jenkins用作CD工具并与用于部署和回滚的标签一起使用,那将是非常棒的。

此处提供更多信息https://groups.google.com/forum/#!msg/jenkinsci-users/mYxtDNMz1ZI/xbX9-xM9BQAJ

  • 在这方面已经取得了进展:https://github.com/jenkinsci/github-branch-source-plugin/pull/158/看起来非常接近合并。 (2认同)
  • @Andrew hm,为什么是在 github 插件中,而不是一般的 git 插件? (2认同)