TeamCity 在多 VCS 设置中构建单独的拉取请求

TeamCity Building separate pull request in a multi VCS setup

我正在尝试为更大的项目设置 TeamCity 10。我们有 3 个不同的 GitHub 存储库,所有这些都需要构建。它们不能像今天的设置那样单独构建。如果我使用所有 GitHub 存储库设置项目,我可以将它们全部放在一个文件夹中并成功构建所有内容。

结构基本上是这样的:

所有签出到同一个文件夹并开始构建。

我现在的问题是我需要 运行 构建每个 repo 的特定拉取请求。我需要一种方法来手动或自动启动构建,例如 PR 1234 on Plugins repo,然后在其余部分上使用 master。

我已经尝试了几种设置,但我就是无法让它按我想要的方式工作。最好的情况是,手动构建启动弹出窗口将为每个回购协议提供 "branch" 下拉菜单,但它始终只有那个。

我考虑过使用快照依赖项,但似乎这需要单独构建它们中的每一个,而目前无法完成。我希望它们 "pulled" 单独并作为一个项目构建。

非常感谢任何有关此问题的帮助,如果有任何不清楚的地方,请随时提出问题。

谢谢!

我为实现这一目标所做的工作是创建多个 VCS 配置和 3 个独立的项目。

  1. 基础回购:默认分支:master
  2. 基础回购:默认分支:master + 分支规范+:/refs/pull/*/merge
  3. UI 回购:默认分支:master
  4. UI Repo:默认分支:master + 分支规范+:/refs/pull/*/merge
  5. 插件仓库:默认分支:master
  6. 插件仓库:默认分支:master + 分支规范+:/refs/pull/*/merge

基础回购拉取请求:

我们将构建 Base Repo 的 Pull Request (2)

该项目将在 master 版本上使用 UI Repo 构建拉取请求。 (3)

该项目将在 master 版本上使用插件仓库构建拉取请求。 (5)

UI 回购拉取请求:

我们将构建 UI Repo (4)

的拉取请求

该项目将在 master 版本上使用基础 Repo 构建拉取请求。 (1)

该项目将在 master 版本上使用插件回购构建拉取请求。 (5)

插件拉取请求:

我们将构建插件仓库 (6) 的拉取请求

此项目将使用 master 版本上的基础 repo 构建拉取请求。 (1)

此项目将使用 master 版本上的 UI 测试构建拉取请求。 (3)

编辑:

如何处理拉取请求

从评论中,我完成了这个回答。 我创建了一个 watcher 以便自动启动拉取请求的构建。 watcher 是一个 TeamCity 构建,运行 定期具有 schedule trigger 功能。

这是该功能的伪代码

parameters:
   - ValidatorName

Load Octokit
// Filter is on every Open Pull Request
openPR = Octokit.PullRequest.GetAllForRepository(filter);      

foreach(pr in openPR) {

    // Define if the PR should be queued.
    // Check if the PR is not already queued.
    queuedBuilds = Execute-HttpGetCommand ("http://<teamcityServerUrl>/httpAuth/app/rest/buildQueue?locator=buildType:validatorName");
    foreach(queued in queuedBuilds) {
        if(queued.branchName = pr.Number) {
               # Flag to not queue the build.
               shouldQueue = false;
        }
    }   

    if(shouldQueue) {
        Execute-HttpPostCommand(
            "http://<teamcityServerUrl>/httpAuth/app/rest/buildQueue", 
            "<build branchName=""pr.Number""><buildType id=""validatorName""/><comment><text>Automatic launcher of Pull Request</text></comment></build>");
    }
}

validator 的概念出现了,它是一个特殊的构建,具有我们想要在拉取请求中测试的快照依赖项。 此构建将加载 octokit 并使用 Octokit.MergePullRequest 对象。

如果它们不能单独构建,那么它们不应该在单独的存储库中。

如果它们都在同一个 repo 中,它将为您省去很多问题,然后您可以通过 pull-request 和功能分支来控制何时构建。