在TeamCity中合并拉取请求后运行CI构建

21

我有一个CI构建,安装在TeamCity中,当在BitBucket(git)中发起拉取请求时将触发该构建。 它目前针对拉取请求的源分支进行构建,但如果它可以构建合并后的拉取请求将更有意义。

我的研究让我得出以下可能的解决方案:

  1. 作为构建的一部分运行脚本-如果可能的话最好不要这样做
  2. 服务器/代理插件-没有足够的文档信息来确定是否可能

在TeamCity中是否有人完成过这个操作或者有建议帮助我实现呢?

更新:(基于John Hoerr的答案)

备选方案-忘记TeamCity执行合并,使用BitBucket Web Hook创建像GitHub一样的已合并的分支,并按照John Hoerr的答案操作。


有趣的是,对于一个 CI 服务器来说,这样一个基本功能需要如此多的问题、解释和不完整或不起作用的解决方案...‍♂️ - Paul Michalik
4个回答

10
在项目的 VCS Root 中添加一个名为 Branch Specification 的标签,内容为 refs/pull-requests/*/merge。这将导致 TeamCity 监控默认分支的已合并拉取请求输出。

8
很遗憾,BitBucket不会为拉取请求创建该分支,这是GitHub特有的功能。 - JonSquared
3
你对BitBucket有多么执着呢? :) - John Hoerr
确实... 这个链接让我想到可以使用 BitBucket web 钩子的另一个用途。 - JonSquared
+:refs/pull-requests/*/from 可以在合并之前构建拉取请求。 - Amar Kumbhar
在TeamCity 2019.1中,只有在VCS ROOTs中不过滤分支或添加以下格式的分支过滤器时才有效:+:*/merge+:pull-requests/* - Paul Michalik

3

似乎BitBucket/Stash在拉取请求下创建分支:

refs/pull-requests//from

您应该能够为该位置设置远程运行,可以使用Teamcity的run-from-branch功能或使用BitBucket/Stash中的http post receive hook。


1
是的 - git ls-remote 显示 refs/pull-requests/#/from(其中 # 是拉取请求的编号)和 refs/pull-requests/#/merge。看起来可以在 TeamCity 的 分支规范 下进行配置,将 # 替换为 * - TrueWill
5
这适用于Bitbucket Server(又名Stash),但不适用于Bitbucket Cloud,我认为OP正在使用后者。 - SteveChapman

3

我觉得你需要的功能可以通过TeamCity的“远程运行”功能来实现。这基本上是一个个人构建,具有合并源和目标合并分支的功能。

https://confluence.jetbrains.com/display/TCD8/Branch+Remote+Run+Trigger

这些分支是常规版本控制分支,TeamCity不管理它们(即如果您不再需要该分支,则需要使用常规版本控制手段删除该分支)。
默认情况下,TeamCity会针对最后一次提交中检测到的用户触发个人构建。您还可以在分支名称中指定TeamCity用户。为此,请在模式中使用占位符TEAMCITY_USERNAME,并在分支名称中使用您的TeamCity用户名。例如,模式remote-run/TEAMCITY_USERNAME/*将匹配分支remote-run/joe/my_feature,并为TeamCity用户joe(如果存在此类用户)启动个人构建。
然后在Bitbucket中设置自定义“Pull Request Created” Webhook。

https://confluence.atlassian.com/display/BITBUCKET/Tutorial%3A+Create+and+Trigger+a+Webhook

对于您的特定用例,与BitBucket集成相关,您可以利用创建的WebHook,然后编写一个shell / bash脚本(取决于您的TeamCity服务器操作系统),自动运行远程运行git命令,这将自动触发服务器上的TeamCity Remote Run CI构建。然后,您将能够转到TeamCity UI,+HEAD:remote-run / my_feature分支,并按功能查看Remote Run结果,并对合并到主要代码行的代码构建结果感到满意。


1

4
这个能防止代码合并吗,直到在TC中构建成功?我们正在寻找一种方法,在TC确认无误之前,阻止拉取请求的合并。最好不要使用Bamboo作为中介... - X_Trust
@X_Trust 你已经成功做到了吗? - Ibrahim Awad
@IbrahimAwad 我不记得了,抱歉:( - X_Trust

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接