【问题标题】:Prevent TeamCity building on fast-forward merge to master if build exists for that SHA1如果该 SHA1 存在构建,则阻止 TeamCity 在快进合并上构建主控
【发布时间】:2018-01-15 13:36:49
【问题描述】:

将 TeamCity 与 git 结合使用。
目前,TeamCity 设置了“master”作为默认分支。

通常,开发在另一个分支上进行(例如“dev”) - TeamCity 设置为监视“dev”上的更改并自动构建。

如果 DEADBEEF-SOME-SHA 已被 TeamCity 构建并标记为“dev”上的构建 1.2.3.4,并且我们将 git SHA1 快速合并到“master”,TeamCity 仍会执行构建 - 所以我们结束DEADBEEF-SOME-SHA 被标记为 1.2.3.4 和 1.2.3.5。

据我了解,将“dev”设为默认分支会阻止这种情况。
如果同一 SHA1 的构建已经成功,是否还有其他方法可以阻止 TeamCity 执行构建?

请注意,如果我们直接推送到 master(并且其他分支上不存在 SHA1/尚未构建),我仍然希望看到构建。

如果可能的话,我希望完全在 TeamCity 中实现这一点 - 无需额外的脚本/文件写入等

【问题讨论】:

  • 我想在 TeamCity 内完成所有这些 - 最好在触发器配置部分内完成。
  • 这种行为还会强制进行完全不必要的构建,这会延长构建机器的负载而没有任何好处。这是一个明显的例子,观察相对于分支的变化,而不是带有明显的缺点(参见 stackoverflow.com/questions/36265182/… 另一个不必要的构建被触发)。

标签: git triggers teamcity


【解决方案1】:

您可以查询特定 SHA1 的构建...但您 have to know your previous buildID for that

所以我会做的是:

  • 将每个作业结束时构建的 sha1 写入专用文件夹(所有代理均可访问)
  • 仅当 sha1 文件不存在时才会触发新作业。

【讨论】:

  • 感谢您的建议,但尽量避免更多移动部分(文件写入)
【解决方案2】:

也许我错过了什么:

如果提交在你的仓库中被标记,在开始一个新的构建之前,你可以检查头部提交是否已经被标记:

# if you use exclusively lightweigth tags :
git show-refs --tags | grep $(git rev-parse HEAD)
# also check that the tag looks like a build tag, e.g : refs/tags/1.2.3.4
   | grep "refs/tags/[1-9.]*$"

# if you use annotated tags :
git show-refs --tags --dereference | grep $(git rev-parse HEAD)
# the grepped line may look like : refs/tags/1.2.3.4^{}
   | grep -E "refs/tags/[1-9.]*(\^\{\})?$"

【讨论】:

  • 你能详细说明这个放在哪里吗?在 VCS 触发规则部分?
【解决方案3】:

如果您只是想限制自动触发构建的分支,请为 VCS 触发器设置分支过滤器:

项目设置 => 触发器 => VCS 触发器(编辑)=> 分支过滤器

设置分支过滤器为

+:dev 

然后(即使“master”是默认分支)构建只会在 dev 上自动触发。仍然可以在其他分支上执行临时构建(假设 VCS 根允许)

【讨论】:

  • 有趣。比我的回答更准确。 +1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多