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

时间:2017-02-22 08:43:05

标签: github continuous-integration teamcity

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

结构基本上看起来像这样:

  • Base repo
  • UI repo
  • 插件回购

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

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

我已经尝试了几种设置,但我无法让它按照我的意愿运行。最好的情况是,如果手动构建启动弹出窗口中的每个回购站都有“分支”下拉菜单,但它总是只有那个。

我考虑过使用快照依赖项,但似乎需要单独构建它们中的每一个,目前无法完成。我希望他们可以单独“拉”并建成一个项目。

我感谢您对此问题的任何帮助,如果有不明确的地方,请随时提问。

谢谢!

2 个答案:

答案 0 :(得分:1)

我所做的是创建多个VCS配置和3个独立项目。

  1. Base Repo:默认分支:master
  2. Base Repo:默认分支:master + Branch规范+:/refs/pull/*/merge
  3. UI Repo:默认分支:master
  4. UI Repo:默认分支:主+分支规范+:/refs/pull/*/merge
  5. 插件回购:默认分支:主
  6. 插件回购:默认分支:主+分支规范+:/refs/pull/*/merge
  7. Base Repo Pull Requests:

    我们将构建Base Repo(2)的拉取请求

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

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

    UI Repo Pull Requests:

    我们将构建UI Repo(4)的拉取请求

    该项目将使用master版本的基础回购构建拉取请求。 (1)

    此项目将使用master版本上的插件存储库构建拉取请求。 (5)

    插件拉取请求:

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

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

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

    编辑:

    如何处理拉取请求

    从评论中,我完成了这个答案。 我创建了一个watcher,以便自动启动拉取请求的构建。 watcher是一个TeamCity Build,使用schedule trigger功能进行peridoically运行。

    这是功能的伪代码

    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对象。

答案 1 :(得分:1)

如果他们不能单独建造,那么他们不应该在单独的回购。

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