我正在尝试为一个较大的项目设置Teamcity 10。我们有3种不同的GitHub存储库,所有这些存储库都需要构建。它们不能像今天的设置一样单独构建。如果我使用所有GitHub存储库设置了该项目,则可以将它们全部放入一个文件夹中,可以成功地构建所有内容。
基本上看起来像这样的结构:
- 基本仓库
- ui repo
- 插件repo
所有这些都签到了同一文件夹并开始构建。
我的问题现在是我需要根据每个仓库的特定拉力请求来运行。我需要一种手动或自动启动构建的方法,例如PR 1234在插件储备上,然后在其余部分上使用主。
我已经尝试了几个设置,但是我只是无法按照我的意愿工作。最好的是,如果手动构建启动弹出弹出窗口将为每个存储库提供"分支"下拉菜单,但它总是有一个。
我考虑过使用快照依赖项,但似乎需要单独构建它们,这目前无法完成。我希望它们单独"拉动"并作为一个项目建造。
我感谢您在这个问题上的任何帮助,并随时提出问题是否不清楚。
谢谢!
我为实现这一目标而做的是创建多个VCS配置和3个分离的项目。
- 基本存储库:默认分支:Master
- 基本存储库:默认分支:主 分支规格
+:/refs/pull/*/merge
- ui repo:默认分支:master
- UI仓库:默认分支:主 分支规格
+:/refs/pull/*/merge
- 插件存储库:默认分支:Master
- 插件存储库:默认分支:主 分支规范
+:/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和功能分支来构建。