TeamCity构建Git/GitHub拉取请求

11
我们有一个 TeamCity 7.1 的安装,它会构建 GitHub 仓库中的所有分支。GitHub 有一个通知钩子回到 TeamCity 触发检入时的构建。我们还让 TeamCity 每 120 秒轮询 GitHub,以检查是否有更改 (以防服务器在提交更改时处于离线状态)。
我们的正常开发遵循一个共同的模式:
1. 从主分支创建一个分支 2. 在该分支上提交代码,直到完成所需功能 3. 完成后,从主分支拉取代码以合并任何更改,并推送到远程 4. 提交 GitHub 请求,请求管理员将其合并到主分支
一切都运行得非常顺利(经过大量搜索以获取正确的配置设置),但是......
上述流程会在 TeamCity 上触发多个构建,我想知道它们是否都是必需的。通常情况下,我们会得到以下构建:
- /refs/heads/branch-name 的构建 - /refs/pull/number/head 的构建 - /refs/pull/number/merge 的构建
显然,第一个构建是特定分支上的最新检入,第二个构建是针对拉取请求的,但是第三个构建是用来做什么的?

通常这不是问题,但是运行我们整个RoR测试套件与集成测试需要大约10分钟,因此我们在拉取请求上没有得到构建状态反馈,需要等待长达30分钟。 - asafb
3个回答

13

第三次构建实际上是最有价值的 - 它是拉取请求自动合并的结果(当您在 GitHub 上按下按钮时发生的合并)。


这也意味着从主分支合并到拉取请求分支是多余的。 - Matt Gibson

3
您的构建似乎是冗余的。在git中组织TeamCity特性分支的构建的更加节俭的方法如下:
1. 组织您的refs/heads/master分支的持续集成。120秒的轮询时间相当合理。
2. 为每个refs/heads/feature-name分支组织夜间构建。根据我的经验,只有少数特性分支需要120秒的轮询。
TeamCity 7.1具有非常好的自动触发功能,因此可以使用类似refs/heads/feature-*的分支掩码轻松设置步骤(2)。
没有必要构建拉取请求,因为它们将被主构建覆盖。

1
关于构建拉取请求,新的GitHub构建状态API允许我们直接在GitHub上显示拉取请求的构建状态,这是一个巨大的时间节省。当我们构建/pulls/1/head分支时,它会显示出来。 - asafb
1
对于那些感兴趣的人,我们改变的关键设置之一是分支规范(稍作修改),并且删除了每次检入时触发构建的选项,这是导致我们大部分头疼的原因。 - asafb

1

如果仍有人使用TeamCity,更新的答案如下:

自2018年以来,有一个本地Pull Request Build Feature。与使用分支触发器和过滤器相比,这是一个更好的解决方案,因为它在构建和相应的PR之间创建了一个双向链接,并使您免于将任何refs/pull/...添加到VCS分支规范中。

不过,如果你坚持使用pull/*/merge:请注意,在GH存储库启用“要求线性历史记录”(仅允许从PR进行Rebase&Squash合并)功能的情况下,这会创建多余的构建,因为在这种情况下,只有当PR与其基础分支保持最新状态时,才能合并PR。


1
八年后,我很高兴有人关心到足够的程度,用更新的信息进行回复!赞。 - asafb

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