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

jenkins trigger build if new tag is released

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

触发:

感谢您的帮助

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

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

您甚至可以 refs/tags/* 找到任何新标签。

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

分支说明符: **

在将更改推送到 GitHub

时,构建中触发器检查构建

请注意, 中的方法不会让 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

上一个对我不起作用。就我而言,单引号中的 refspec 有效:

参考规范: '+refs/tags/*':'refs/remotes/origin/tags/*' 分支说明符:**/tags/**

我有 Jenkins 2.120。要使由标签触发的作业工作需要执行以下步骤:

  1. 创建工作:

    参考规范: '+refs/tags/*':'refs/remotes/origin/tags/*'

    分支说明符:**/tags/**

  2. 运行 构建

  3. 将相同的作业重新配置为参数:

    参考规范: '+refs/tags/*':'refs/remotes/origin/tags/*'

    分支说明符:**

  4. 运行 构建

  5. 将相同的作业重新配置为参数:

    参考规范: '+refs/tags/*':'refs/remotes/origin/tags/*' 分支说明符:**/tags/**

  6. 运行 构建

只有在这个神奇的步骤之后,当我标记分支时它会自动触发 Jenkins

@albertski 回答有效但不要忘记以下附加设置: 1. 设置从 Bitbucket 到 Jenkins 的挂钩 2.轮询SCM需要勾选

您可以通过从 bitbucket 存储库中的提交添加新的 git 标记来测试触发器。

他们发布了一个可以在 when 块中使用的新 "buildingTag"。

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.

https://jenkins.io/blog/2018/04/09/whats-in-declarative/

结合@albertski 和@Sergey 的回答对我有用。

路径:Jenkins > {YourJob} > Configure > 管道 > 定义(来自 SCM 的管道脚本)> SCM(Git)

选项:

存储库 > 高级... > Refspec +refs/tags/v*:refs/remotes/origin/tags/v*

要构建的分支 > 分支说明符('any' 为空) **/tags/v*

如果要构建以 v 开头的标记,请设置 v*,例如 v0.1.0、v1.0.5...

我真的坚持这个,因为我勾选了 'delete workspace',但是构建需要一个现有的工作区来进行比较。所以我做了以下事情:

  1. 将参考规格设置为 '+refs/tags/*':'refs/remotes/origin/tags/*'
  2. 将分支说明符设置为 refs/tags/{A SPECIFIC TAG}
  3. 确保未勾选 'Delete workspace before build starts'
  4. 运行 创建初始工作区的构建
  5. 将分支说明符设置为 refs/tags/**
  6. 确保轮询您的 Git 服务已勾选
  7. 在 Git 服务(例如 Github)上设置 webhook
  8. 在 Git 服务中创建一个新标签来触发 webhook

现在应该可以了。 您需要注意的日志中的消息是 Multiple candidate revisions 这意味着当 Git 从远程获取然后应用分支说明符时有多个匹配项因此它只选择列表中的第一个.