32

将单个 TeamCity 构建配置从一台服务器移动到另一台服务器的最佳方式是什么?

我有一个本地的 TeamCity 实例,我在此基础上进行测试。然后当构建足够成熟时,我在我们的主 TeamCity 服务器上手动创建它(眼球复制)。

是否有可以为我执行此操作的导出和导入功能?

4

4 回答 4

37

不幸的是,没有这样的事情。TeamCity 8 通过引入构建 ID 格式(项目名称 + 构建配置名称,可以覆盖)使情况有所改善,这使得“手动复制”构建配置变得可行:

基本上,您的所有 TeamCity 构建配置实际上只是 BuildServer\config\projects\ 文件夹和子文件夹中的 XML 文件。虽然我还没有尝试过,但如果 id 不冲突,您应该可以将项目文件夹或构建配置 XML 复制到新 TeamCity 实例上的适当目标。至少,您绝对可以通过这种方式使用更新覆盖现有项目(我过去曾做过“动态”动态更改构建配置的事情)。

当然,如果您的构建配置依赖于其他构建/工件,那么这些 id 也必须匹配,因此您要么也必须复制它们,要么相应地调整 id。代理要求也是如此。

编辑:

随着 TeamCity 9 的推出,现在有一个更好的选择来在内置的 TeamCity 服务器之间移动项目:

现在,TeamCity 提供了在服务器之间移动项目的能力:您可以将项目及其所有数据(设置、构建和更改历史记录等)以及您的 TeamCity 用户帐户从一台服务器传输到另一台服务器。您需要做的就是在包含要导入的项目的源 TeamCity 服务器上创建一个常用备份文件,将备份文件放入目标服务器上的 /import 目录,然后按照管理 | 上的导入步骤进行操作。项目导入页面。

有关完整摘要,请参阅TeamCity 9 中的新增功能。

于 2014-04-22T22:06:42.243 回答
18

对于 TeamCity 9 及更高版本:

  1. 确保 TeamCity 的两个实例都运行相同的版本。
  2. 从 TeamCity 导出数据:使用源计算机上的 Web UI,转到Administration -> Backup并执行基本备份。它会告诉您创建的备份文件的路径。
  3. 将数据导入 TeamCity
    1. 在目标服务器上,打开 Web UI 并导航到Administration -> Projects Import. 这将告诉您导入目录的路径。
    2. 将备份文件复制到导入目录,刷新 Web UI,然后单击“配置导入范围”
    3. 选择要导入的项目和数据类别。鉴于问题只是关于构建配置,您将取消选中导入用户和组。单击“开始导入”。
于 2015-10-21T10:19:19.890 回答
2

TeamCity 9 内置了这种能力 - https://confluence.jetbrains.com/display/TCD9/Projects+Import

于 2015-09-07T10:01:14.880 回答
0

我发现项目导入功能不够精细,无法仅恢复一个构建配置,但通过 API 设法做到了这一点。使用 PowerShell,您可以针对源调用 invoke-webrequest:

$serviceAccountCredentials = New-Object System.Management.Automation.PSCredential -ArgumentList @('<domain>\<user>',(ConvertTo-SecureString -String 'Password' -AsPlainText -Force))

$settings = Invoke-RestMethod -Method Get -Uri 'http://<TeamCity_Build_server>/httpAuth/app/rest/buildTypes/id:<buildID>/settings' -Credential $serviceAccountCredentials
$parameters = Invoke-RestMethod -Method Get -Uri 'http://<TeamCity_Build_server>/httpAuth/app/rest/buildTypes/id:<buildID>/parameters' -Credential $serviceAccountCredentials
$steps = Invoke-RestMethod -Method Get -Uri 'http://<TeamCity_Build_server>/httpAuth/app/rest/buildTypes/id:<buildID>/steps' -Credential $serviceAccountCredentials
$features = Invoke-RestMethod -Method Get -Uri 'http://<TeamCity_Build_server>/httpAuth/app/rest/buildTypes/id:<buildID>/features' -Credential $serviceAccountCredentials
$triggers = Invoke-RestMethod -Method Get -Uri 'http://<TeamCity_Build_server>/httpAuth/app/rest/buildTypes/id:<buildID>/triggers' -Credential $serviceAccountCredentials
$agentReqs = Invoke-RestMethod -Method Get -Uri 'http://<TeamCity_Build_server>/httpAuth/app/rest/buildTypes/id:<buildID>/agent-requirements' -Credential $serviceAccountCredentials
$artifactDep = Invoke-RestMethod -Method Get -Uri 'http://<TeamCity_Build_server>/httpAuth/app/rest/buildTypes/id:<buildID>/artifact-dependencies' -Credential $serviceAccountCredentials
$snapshotDep = Invoke-RestMethod -Method Get -Uri 'http://<TeamCity_Build_server>/httpAuth/app/rest/buildTypes/id:<buildID>/snapshot-dependencies' -Credential $serviceAccountCredentials
$vcsRoot = Invoke-RestMethod -Method Get -Uri 'http://<TeamCity_Build_server>/httpAuth/app/rest/buildTypes/id:<buildID>/vcs-root-entries' -Credential $serviceAccountCredentials

然后,您可以将 XML 传递到目的地:

#import settings
Invoke-RestMethod -Method put -Uri 'http://<TeamCity_Build_server>/httpAuth/app/rest/buildTypes/id:<buildID>/settings' -body $settings.OuterXml -ContentType application/xml -Credential $serviceAccountCredentials
#import parameters
Invoke-RestMethod -Method put -Uri 'http://<TeamCity_Build_server>/httpAuth/app/rest/buildTypes/id:<buildID>/parameters' -body $parameters.OuterXml -ContentType application/xml -Credential $serviceAccountCredentials
#import steps
Invoke-RestMethod -Method put -Uri 'http://<TeamCity_Build_server>/httpAuth/app/rest/buildTypes/id:<buildID>/steps' -body $steps.OuterXml -ContentType application/xml -Credential $serviceAccountCredentials
#import features
Invoke-RestMethod -Method put -Uri 'http://<TeamCity_Build_server>/httpAuth/app/rest/buildTypes/id:<buildID>/features' -body $features.OuterXml -ContentType application/xml -Credential $serviceAccountCredentials
#import triggers
Invoke-RestMethod -Method put -Uri 'http://<TeamCity_Build_server>/httpAuth/app/rest/buildTypes/id:<buildID>/triggers' -body $triggers.OuterXml -ContentType application/xml -Credential $serviceAccountCredentials
#Import VCS root setting
Invoke-RestMethod -Method put -Uri 'http://<TeamCity_Build_server>/httpAuth/app/rest/buildTypes/id:<buildID>/vcs-root-entries' -body $VCSRoots.OuterXml -ContentType application/xml -Credential $serviceAccountCredentials

有关构建配置的 TeamCity api 文档可在此处获得:https ://confluence.jetbrains.com/display/TW/REST+API#RESTAPI-BuildConfigurationAndTemplateSettings

于 2019-06-10T12:14:00.523 回答