TeamCity 在多 VCS 设置中构建单独的拉取请求
TeamCity Building separate pull request in a multi VCS setup
我正在尝试为更大的项目设置 TeamCity 10。我们有 3 个不同的 GitHub 存储库,所有这些都需要构建。它们不能像今天的设置那样单独构建。如果我使用所有 GitHub 存储库设置项目,我可以将它们全部放在一个文件夹中并成功构建所有内容。
结构基本上是这样的:
- 基础回购
- UI 回购
- 插件库
所有签出到同一个文件夹并开始构建。
我现在的问题是我需要 运行 构建每个 repo 的特定拉取请求。我需要一种方法来手动或自动启动构建,例如 PR 1234 on Plugins repo,然后在其余部分上使用 master。
我已经尝试了几种设置,但我就是无法让它按我想要的方式工作。最好的情况是,手动构建启动弹出窗口将为每个回购协议提供 "branch" 下拉菜单,但它始终只有那个。
我考虑过使用快照依赖项,但似乎这需要单独构建它们中的每一个,而目前无法完成。我希望它们 "pulled" 单独并作为一个项目构建。
非常感谢任何有关此问题的帮助,如果有任何不清楚的地方,请随时提出问题。
谢谢!
我为实现这一目标所做的工作是创建多个 VCS 配置和 3 个独立的项目。
- 基础回购:默认分支:master
- 基础回购:默认分支:master + 分支规范
+:/refs/pull/*/merge
- UI 回购:默认分支:master
- UI Repo:默认分支:master + 分支规范
+:/refs/pull/*/merge
- 插件仓库:默认分支:master
- 插件仓库:默认分支: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 和功能分支来控制何时构建。
我正在尝试为更大的项目设置 TeamCity 10。我们有 3 个不同的 GitHub 存储库,所有这些都需要构建。它们不能像今天的设置那样单独构建。如果我使用所有 GitHub 存储库设置项目,我可以将它们全部放在一个文件夹中并成功构建所有内容。
结构基本上是这样的:
- 基础回购
- UI 回购
- 插件库
所有签出到同一个文件夹并开始构建。
我现在的问题是我需要 运行 构建每个 repo 的特定拉取请求。我需要一种方法来手动或自动启动构建,例如 PR 1234 on Plugins repo,然后在其余部分上使用 master。
我已经尝试了几种设置,但我就是无法让它按我想要的方式工作。最好的情况是,手动构建启动弹出窗口将为每个回购协议提供 "branch" 下拉菜单,但它始终只有那个。
我考虑过使用快照依赖项,但似乎这需要单独构建它们中的每一个,而目前无法完成。我希望它们 "pulled" 单独并作为一个项目构建。
非常感谢任何有关此问题的帮助,如果有任何不清楚的地方,请随时提出问题。
谢谢!
我为实现这一目标所做的工作是创建多个 VCS 配置和 3 个独立的项目。
- 基础回购:默认分支:master
- 基础回购:默认分支:master + 分支规范
+:/refs/pull/*/merge
- UI 回购:默认分支:master
- UI Repo:默认分支:master + 分支规范
+:/refs/pull/*/merge
- 插件仓库:默认分支:master
- 插件仓库:默认分支: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 和功能分支来控制何时构建。