我们在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总是被触发,例如既提出拉动请求又合并为开发。只有在合并到开发中才会触发,这是正确的。
非常感谢任何帮助。
修改
我已经澄清了我们上面使用的两种构建配置
答案 0 :(得分:2)
根据文档,如果您只想构建拉取请求的合并代码,则不需要指定括号。
现在,(...)查看特定请求是合并的结果还是仅仅是分支本身。为此,我们可以在分支规范
中指定以下内容+:参/拉/(* /合并)
创建拉取请求后,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;即使只是+:*,也可以根据需要指定任意数量的条目(在不同的行上)。
希望这有帮助。