在多VCS设置中,Teamcity build build build tup react



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

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

  • 基本仓库
  • ui repo
  • 插件repo

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

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

我已经尝试了几个设置,但是我只是无法按照我的意愿工作。最好的是,如果手动构建启动弹出弹出窗口将为每个存储库提供"分支"下拉菜单,但它总是有一个。

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

我感谢您在这个问题上的任何帮助,并随时提出问题是否不清楚。

谢谢!

我为实现这一目标而做的是创建多个VCS配置和3个分离的项目。

  1. 基本存储库:默认分支:Master
  2. 基本存储库:默认分支:主 分支规格+:/refs/pull/*/merge
  3. ui repo:默认分支:master
  4. UI仓库:默认分支:主 分支规格+:/refs/pull/*/merge
  5. 插件存储库:默认分支:Master
  6. 插件存储库:默认分支:主 分支规范+:/refs/pull/*/merge

基本储物库拉请求:

我们将建立基本仓库(2)

的拉力请求

此项目将使用master版本上的UI回购构建拉动请求。(3)

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

UI回购请求:

我们将构建UI Repo(4)

的拉力请求

此项目将使用master版本上的基本回购构建拉动请求。(1)

此项目将使用master版本上的插件回购构建拉动请求。(5)

插件拉请求:

我们将构建插件repo(6)

的拉力请求

此项目将使用master版本上的基本存储库来构建拉动请求。(1)

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

编辑:

如何处理拉请请求

从评论中,我完成了这个答案。我创建了一个watcher,以便自动启动拉动请求的构建。watcher是一个团队构建,它具有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对象。

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

如果它们都在同一回购中,它将为您节省很多问题,然后您可以控制何时通过Pull-Request和功能分支来构建。

最新更新