将单个 TeamCity 构建配置从一台服务器移动到另一台服务器的最佳方式是什么?
我有一个本地的 TeamCity 实例,我在此基础上进行测试。然后当构建足够成熟时,我在我们的主 TeamCity 服务器上手动创建它(眼球复制)。
是否有可以为我执行此操作的导出和导入功能?
将单个 TeamCity 构建配置从一台服务器移动到另一台服务器的最佳方式是什么?
我有一个本地的 TeamCity 实例,我在此基础上进行测试。然后当构建足够成熟时,我在我们的主 TeamCity 服务器上手动创建它(眼球复制)。
是否有可以为我执行此操作的导出和导入功能?
不幸的是,没有这样的事情。TeamCity 8 通过引入构建 ID 格式(项目名称 + 构建配置名称,可以覆盖)使情况有所改善,这使得“手动复制”构建配置变得可行:
基本上,您的所有 TeamCity 构建配置实际上只是 BuildServer\config\projects\ 文件夹和子文件夹中的 XML 文件。虽然我还没有尝试过,但如果 id 不冲突,您应该可以将项目文件夹或构建配置 XML 复制到新 TeamCity 实例上的适当目标。至少,您绝对可以通过这种方式使用更新覆盖现有项目(我过去曾做过“动态”动态更改构建配置的事情)。
当然,如果您的构建配置依赖于其他构建/工件,那么这些 id 也必须匹配,因此您要么也必须复制它们,要么相应地调整 id。代理要求也是如此。
编辑:
随着 TeamCity 9 的推出,现在有一个更好的选择来在内置的 TeamCity 服务器之间移动项目:
现在,TeamCity 提供了在服务器之间移动项目的能力:您可以将项目及其所有数据(设置、构建和更改历史记录等)以及您的 TeamCity 用户帐户从一台服务器传输到另一台服务器。您需要做的就是在包含要导入的项目的源 TeamCity 服务器上创建一个常用备份文件,将备份文件放入目标服务器上的 /import 目录,然后按照管理 | 上的导入步骤进行操作。项目导入页面。
有关完整摘要,请参阅TeamCity 9 中的新增功能。
对于 TeamCity 9 及更高版本:
Administration -> Backup
并执行基本备份。它会告诉您创建的备份文件的路径。Administration -> Projects Import
. 这将告诉您导入目录的路径。TeamCity 9 内置了这种能力 - https://confluence.jetbrains.com/display/TCD9/Projects+Import
我发现项目导入功能不够精细,无法仅恢复一个构建配置,但通过 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