Подтвердить что ты не робот

Импорт/экспорт конфигурации TeamCity с одного сервера на другой

Какой лучший способ переместить одну конфигурацию сборки TeamCity с одного сервера на другой?

У меня есть локальный экземпляр TeamCity, который я тестирую. Затем, когда сборка достаточно зрелая, я вручную создаю ее (eyeball-copy) на нашем основном сервере TeamCity.

Есть ли функция экспорта и импорта, которая будет делать это для меня?

4b9b3361

Ответ 1

К сожалению, такой вещи нет. TeamCity 8 немного улучшила ситуацию, введя формат Build Id (имя проекта + имя конфигурации сборки, можно перезаписать), что делает возможным "компоновать копии" конфигураций сборки:

В основном под капотом все ваши конфигурации сборки TeamCity на самом деле являются просто файлами XML в папке BuildServer\config\projects\и вложенных папках. Хотя я не пробовал это, вы должны просто скопировать папку проекта или создать конфигурационный XML-код в соответствующий пункт назначения на своем новом экземпляре TeamCity, если идентификаторы не сталкиваются. По крайней мере, вы можете, безусловно, перезаписать существующие проекты такими обновлениями (что-то, что я делал в прошлом, для динамического изменения конфигураций сборки "на лету" ).

Конечно, если ваша конфигурация сборки зависит от других сборок/артефактов, эти идентификаторы также должны совпадать, так что вам тоже нужно скопировать их или настроить соответственно. То же самое касается требований агента.

Edit:

В TeamCity 9 теперь есть гораздо лучший вариант для перемещения проектов между серверами TeamCity, встроенными в:

Теперь TeamCity предоставляет возможность перемещения проектов между серверами: вы могут передавать проекты со всеми своими данными (настройки, сборки и история изменений и т.д.) и с учетными записями пользователей TeamCity от одного сервер к другому. Все, что вам нужно сделать, это создать обычный файл резервной копии на исходный сервер TeamCity, содержащий проекты, которые необходимо импортировать, файл резервной копии в каталог /import на целевого сервера и выполните шаги импорта в Администрировании | Страница импорта проектов.

Для полного резюме см. что нового в TeamCity 9.

Ответ 2

Для TeamCity 9 и выше:

  • Убедитесь, что оба экземпляра TeamCity работают с одинаковой версией.
  • Экспорт данных из TeamCity. Используя веб-интерфейс на исходном компьютере, перейдите к Administration -> Backup и выполните базовую резервную копию. Он укажет путь к создаваемому файлу резервной копии.
  • Импортировать данные в TeamCity:
    • На целевом сервере откройте веб-интерфейс и перейдите к Administration -> Projects Import. Это укажет путь к каталогу импорта.
    • Скопируйте файл резервной копии в каталог импорта, обновите веб-интерфейс и нажмите "Настроить область импорта"
    • Выберите проекты и категории данных, которые вы хотите импортировать. Учитывая, что вопрос был связан только с конфигурациями сборки, вы должны отключить импорт пользователей и групп. Нажмите "Начать импорт".

Ответ 4

Я обнаружил, что функция импорта проектов не была достаточно детальной, чтобы восстановить только одну конфигурацию сборки, но ей удалось сделать это через 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

Документация API TeamCity о конфигурациях сборки доступна здесь: https://confluence.jetbrains.com/display/TW/REST+API#RESTAPI-BuildConfigurationAndTemplateSettings