我正在尝试为更大的项目设置TeamCity 10。我们有3个不同的GitHub repos,它们都需要构建。它们不能像今天的设置那样单独构建。如果我使用所有GitHub存储库设置项目,我可以将它们全部放在一个文件夹中,然后成功构建所有内容。
结构基本上看起来像这样:
所有这些都签出到同一个文件夹并开始构建。
我现在的问题是我需要在每个repo的特定拉取请求上运行构建。我需要一种方法来手动或自动启动构建,例如插件repo上的PR 1234,然后在其余部分使用master。
我已经尝试了几种设置,但我无法让它按照我的意愿运行。最好的情况是,如果手动构建启动弹出窗口中的每个回购站都有“分支”下拉菜单,但它总是只有那个。
我考虑过使用快照依赖项,但似乎需要单独构建它们中的每一个,目前无法完成。我希望他们可以单独“拉”并建成一个项目。
我感谢您对此问题的任何帮助,如果有不明确的地方,请随时提问。
谢谢!
答案 0 :(得分:1)
我所做的是创建多个VCS配置和3个独立项目。
+:/refs/pull/*/merge
+:/refs/pull/*/merge
+:/refs/pull/*/merge
我们将构建Base Repo(2)的拉取请求
该项目将使用master
版本的UI Repo构建拉取请求。 (3)
该项目将使用master
版本上的插件仓库构建拉取请求。 (5)
我们将构建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分支来控制何时构建。