Quelle est la meilleure façon de déplacer une seule configuration de build TeamCity d'un serveur à un autre?
J'ai une instance locale de TeamCity sur laquelle je teste les builds. Ensuite, lorsque la version est suffisamment mature, je la crée manuellement (copie du globe oculaire) sur notre serveur TeamCity principal.
Existe-t-il une fonction d'exportation et d'importation qui fera cela pour moi?
Malheureusement, il n'y a rien de tel. TeamCity 8 a toutefois amélioré la situation en introduisant un format Build Id (le nom du projet + le nom de la configuration, peuvent être remplacés) qui permet de "copier à la main" les configurations de construction:
Fondamentalement, sous le capot, toutes vos configurations de construction TeamCity ne sont en fait que des fichiers XML dans le dossier BuildServer\config\projects\et ses sous-dossiers. Bien que je n'aie pas essayé cela, vous devriez pouvoir simplement copier votre dossier de projet ou créer du XML de configuration vers la destination appropriée sur votre nouvelle instance TeamCity si les ID ne se heurtent pas. À tout le moins, vous pouvez définitivement remplacer les projets existants avec des mises à jour de cette façon (quelque chose que j'ai fait dans le passé pour changer dynamiquement les configurations de construction "à la volée").
Bien sûr, si votre configuration de build dépend d'autres builds/artefacts, ces identifiants doivent également correspondre, vous devez donc les copier également ou ajuster les identifiants en conséquence. Il en va de même pour les exigences des agents.
Modifier:
Avec TeamCity 9 maintenant disponible, il existe une bien meilleure option pour déplacer des projets entre les serveurs TeamCity intégrés:
Désormais, TeamCity offre la possibilité de déplacer des projets entre les serveurs: vous pouvez transférer des projets avec toutes leurs données (paramètres, historique des builds et des modifications, etc.) et avec vos comptes d'utilisateurs TeamCity d'un serveur à un autre. Il vous suffit de créer un fichier de sauvegarde habituel sur le serveur TeamCity source contenant les projets à importer, de placer le fichier de sauvegarde dans le répertoire/import du serveur cible et de suivre les étapes d'importation dans Administration | Page d'importation de projets.
Pour un résumé complet, voir Quoi de neuf dans TeamCity 9 .
Pour TeamCity 9 et supérieur:
Administration -> Backup
et effectuez une sauvegarde de base. Il vous indiquera le chemin d'accès au fichier de sauvegarde créé.Administration -> Projects Import
. Cela vous indiquera le chemin d'accès au répertoire d'importation.TeamCity 9 a cette capacité intégrée - https://confluence.jetbrains.com/display/TCD9/Projects+Import
J'ai trouvé que la fonction d'importation de projets n'était pas assez granulaire pour restaurer une seule configuration de build, mais j'ai réussi à le faire via l'API. En utilisant PowerShell, vous pouvez appeler une invocation-webrequest contre la source:
$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
Vous pouvez ensuite transmettre le XML à la destination:
#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
La documentation de l'API TeamCity sur les configurations de build est disponible ici: https://confluence.jetbrains.com/display/TW/REST+API#RESTAPI-BuildConfigurationAndTemplateSettings