2016-07-27 133 views
2

我们在GitHub分支中创建特征(一个特征分支指向一个特征)。我们有一个开发分支和一个主分支。两者都应该是绿色的。合并触发时的TeamCity触发器与合并触发器

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

这一切工作,除了我们有触发错误。

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

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

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

任何帮助将不胜感激。

编辑

我已经澄清了我们使用上述

+0

您描述的方式使您听起来像有两个VCS根,或者您试图动态设置默认分支(可能是我已经解释过它的方式)您能否确认您只有一个VCS根目录,并且不会动态更改默认/分支规格。 –

+1

我们的项目有两个VCS根目录,每个生成配置都有一个VCS根目录。我们不会动态更改默认或分支规范,只是我们已经设置了两个VCS根目录。 – christophmccann

+0

啊哈 - 我会质疑需要两个VCS根源,因为这应该是一个工作 - 你想聊聊吗? http://chat.stackoverflow.com/rooms/117201/evolve-software-ltd –

回答

0

我与进化软件公司,你可能可以解决与单根VCS所有构建配置需要同意两个构建配置。我并不完全明白方案1出了什么问题,但这意味着你不想在那里建立合并。 我认为您正在寻找VCS触发器中相应构建配置的分支过滤器的适当规格。语法是相当简单的,如果我不清楚TC文档涵盖这一部分:

  • +:<default>将包括默认分支(如VCS根指定)
  • -:<default>将排除默认分支
  • + or -:branch_name将包括或作为分支规范规定排除逻辑分支名称(在括号中部分或全部的事情,如果没有括号)

请注意,如果你指定一个“排除”项目,你需要指定一个“包括”条目,即使只是+:*,并且您可以根据需要(在不同的行上)指定尽可能多的条目。

希望这会有所帮助。

1

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

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

+0

我已经完成了这项工作 - 我现在有一个VCS根监控开发,然后在分支规范中我有+:refs/pull/*/merge。这显然触发了两个构建配置,所以我试图用+:refs/pull/*/merge添加一个分支过滤器到触发器,但是这样可以防止它在新的请求中被触发。任何想法? – christophmccann