TeamCity触发拉动请求与合并时的触发

时间:2016-07-27 17:23:22

标签: git github teamcity

我们在GitHub分支中构建功能(一个功能分支到一个功能)。我们有一个开发分支和一个主分支。两者都应该是绿色的。

我们使用TeamCity进行构建和部署。我想要的是,当创建一个pull请求时(从功能分支开发),TeamCity会自动构建并测试请求,然后启动一个EC2实例,以便可以手动测试它。然后,当合并拉取请求时,TeamCity构建,测试并创建一个我们推送到ECS的docker镜像。

这一切都有效,除了我们有触发错误。

1)为了构建拉取请求,VCS根目录的默认分支设置为develop,分支规范为+:refs/pull/(*/merge) - 我们不想单独构建拉取请求但是构建合并的代码。然后,我们将其部署到EC2实例上以进行手动测试。

2)TeamCity向GitHub报告构建拉取请求的状态,并且在使用EC2实例进行手动测试之后,代码将从功能分支合并到开发中。此时,我们希望在开发中构建代码,然后将新的微服务推送到Amazon ECS上。一旦将pull请求合并到develop中,构建时,VCS根目录的默认分支设置为develop

实际上,1总是被触发,例如既提出拉动请求又合并为开发。只有在合并到开发中才会触发,这是正确的。

非常感谢任何帮助。

修改

我已经澄清了我们上面使用的两种构建配置

3 个答案:

答案 0 :(得分:2)

根据文档,如果您只想构建拉取请求的合并代码,则不需要指定括号。

https://blog.jetbrains.com/teamcity/2013/02/automatically-building-pull-requests-from-github-with-teamcity/

  

现在,(...)查看特定请求是合并的结果还是仅仅是分支本身。为此,我们可以在分支规范

中指定以下内容      

+:参/拉/(* /合并)

创建拉取请求后,TeamCity将仅测试合并代码的结果进行开发。

使用TeamCity automatic merge功能(包含在TC9中),将在develop分支上触发新的提交,该分支将运行您的配置(基于开发,测试开发,部署.. 。)正确

因此,您可能只需将分支规范从+:refs/pull/(*/merge)替换为+:refs/pull/*/merge

答案 1 :(得分:1)

答案很简单。导致这个问题的是github 每当github认为有更改并且重建"时,+:refs/pull/*/merge分支就会更新。合并结果和团队城市每次触发火灾。

有时,当有人阅读并评论开放拉取请求时,就会发生这种情况。它首先在打开PR时发生定义(如果需要),第二次是在实际合并发生且结果重建时。目前没有办法解决这个问题。 Github webhooks应该告知PR的状态(打开/关闭和完成),TC触发规则应该做其余的...也许将来!

顺便说一句,我为每个构建配置都有单独的VCS。工作正常,使其更灵活...

答案 2 :(得分:0)

我同意Evolve Software Ltd的说法,您可以使用单个VCS root来满足所有构建配置需求。我没有得到方案1的确切错误,但暗示您不希望构建合并以在那里开发。 我认为您正在VCS触发器中寻找适当的分支过滤器规范,以获取相关的构建配置。语法相当简单,如果我不清楚,TC文档将涵盖这一部分:

  • +:<default>将包含默认分支(在vcs root中指定)
  • -:<default>将排除默认分支
  • + or -:branch_name将包含或排除分支规范中指定的逻辑分支名称(parens中的部分或整个事物,如果没有parens)

请注意,如果您指定了&#39;排除&#39;您需要指定一个&#39; include&#39;即使只是+:*,也可以根据需要指定任意数量的条目(在不同的行上)。

希望这有帮助。