web-dev-qa-db-fra.com

Importer / exporter la configuration de construction TeamCity d'un serveur à un autre

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?

30
Ace

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 .

36
BrokenGlass

Pour TeamCity 9 et supérieur:

  1. Assurez-vous que les deux instances de TeamCity exécutent la même version.
  2. Exporter les données de TeamCity : À l'aide de l'interface utilisateur Web sur la machine source, accédez à Administration -> Backup et effectuez une sauvegarde de base. Il vous indiquera le chemin d'accès au fichier de sauvegarde créé.
  3. Importer des données vers TeamCity :
    1. Sur le serveur cible, ouvrez l'interface utilisateur Web et accédez à Administration -> Projects Import. Cela vous indiquera le chemin d'accès au répertoire d'importation.
    2. Copiez le fichier de sauvegarde dans le répertoire d'importation, actualisez l'interface utilisateur Web et cliquez sur "Configurer la portée d'importation"
    3. Sélectionnez les projets et les catégories de données que vous souhaitez importer. Étant donné que la question portait uniquement sur les configurations de génération, vous décochez l'option d'importation d'utilisateurs et de groupes. Cliquez sur "Démarrer l'importation".
14
Martin Eden

TeamCity 9 a cette capacité intégrée - https://confluence.jetbrains.com/display/TCD9/Projects+Import

2
sppc42

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

0
Tim Aitken