1つのTeamCityビルド構成をサーバー間で移動する最良の方法は何ですか?
ビルドをテストするTeamCityのローカルインスタンスがあります。次に、ビルドが十分に成熟したら、メインのTeamCityサーバーで手動で作成(眼球コピー)します。
これを行うエクスポートおよびインポート機能はありますか?
残念ながら、そのようなことはありません。 TeamCity 8は、ビルドIDを導入することで状況を少し改善しました(プロジェクト名+ビルド構成名、上書き可能)。これにより、ビルド構成を「手動でコピー」できます。
基本的に、すべてのTeamCityビルド構成は、実際にはBuildServer\config\projects \フォルダーおよびサブフォルダー内の単なるXMLファイルです。私はこれを試していませんが、IDが衝突しない場合は、プロジェクトフォルダーをコピーするか、新しいTeamCityインスタンスの適切な宛先に構成XMLを構築することができるはずです。少なくとも、この方法で既存のプロジェクトを更新で確実に上書きすることができます(ビルド構成を動的に「オンザフライ」で変更するために過去に行ったことです)。
もちろん、ビルド構成が他のビルド/アーティファクトに依存している場合、それらの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
プロジェクトのインポート機能は、1つのビルド構成だけを復元するのに十分な粒度ではないことがわかりましたが、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