web-dev-qa-db-fra.com

Comment importer une définition de version dans Azure Devops (VSTS)?

J'essaie de copier une définition de version d'un projet Azure Devops (VSTS) vers un autre. Dans le projet source, je peux exporter la définition de la version sous forme de fichier json.

export release definition

Mais je ne suis pas en mesure de trouver un moyen d'importer cela dans le projet cible. Je n'ai que des options pour créer de nouvelles définitions.

create release definition

8
reggaemahn

enter image description here

Allez à Build and Releases puis à Releases et vous y trouverez une option. Cliquez sur le bouton + et il y a une option pour importer les définitions des versions

Faites-moi savoir si vous avez besoin d'aide.

5
noor

Étant donné que VSTS est renommé/mis à jour dans Azure DevOps , il y a quelques changements dans l'interface utilisateur pour trouver ces options ci-dessus.

Pour importer

enter image description here

Pour l'exportation

enter image description here

Concernant l'addendum

Toute la définition de build/release est venue avec le terme unique appelé Pipeline. Il n'est donc pas nécessaire de créer une définition de version fictive pour en importer une nouvelle. Vous pouvez importer une nouvelle définition de version sans en avoir une fictive.

8
Jayendran

En lisant les commentaires ci-dessus, la raison pour laquelle vous rencontrez des problèmes avec l'importation d'une définition de version à partir d'une autre origine VSTS/Azure DevOps est parce que la définition de version que vous avez exportée contient GUID références à des objets qui n'existent pas dans l'organisation ou le projet dans lequel vous importez la définition de version. Par conséquent, vous allez devoir retrousser vos manches et effectuer certains travaux afin d'obtenir une définition de version réussie et parfaitement intégrée que vous pouvez utiliser comme modèle. Nous allons utiliser l'API REST trouvée ici: https://docs.Microsoft.com/en-us/rest/api/vsts/release/definitions/create ? view = vsts-rest-4.1

Voici ma réponse technique et ce que j'ai fait pour dupliquer une définition de version et créer un modèle à utiliser plusieurs fois:

  1. Exportez la définition de version de votre choix

  2. Formatez le JSON dans un outil comme https://jsonformatter.curiousconcept.com pour le rendre plus lisible, puis enregistrez-le dans un fichier texte comme ReleasePipelineTemplate-Formatted.json

  3. Je ne sais pas quels composants vous avez définis dans votre définition de version, mais jetez un œil et voyez comment les GUID sont utilisés partout. Il peut être utile de créer une définition de version afin de trouver les GUID que vous allez devoir remplacer.

  4. Les GUID à rechercher sont SYSTEM_COLLECTIONID, SYSTEM_TEAMPROJECTID, SYSTEM_DEFINITIONID, BUILD_QUEUEDBYID

  5. Laissez-nous obtenir quelques variables mentionnées ci-dessus de votre organisation de construction et de votre projet. Pour les obtenir, nous devons imprimer certaines variables d'environnement lors d'une construction régulière. Par conséquent, veuillez ajouter une étape de génération quelque part au début de votre génération CI qui ajoute une étape "Script de lot" avec la commande suivante "C:\Windows\System32\cmd.exe" et l'argument "/ c set". Une fois la génération terminée, consultez les journaux de cette étape de génération et recherchez les valeurs de ces variables. Vous en aurez besoin dans la définition de version.

  6. Vous devez en faire une copie avant de modifier le fichier json. Vous devriez réduire un peu le fichier json en supprimant quelques éléments comme "createdOn", "modifiedBy", "modifiedOn". Tout en bas est "url" sont 3 liens. Ceux-ci doivent être modifiés avec l'ID de projet d'équipe GUID par exemple. Ceci est juste un exemple d'endroits qui doivent être modifiés. Veuillez inspecter votre propre définition de version.

  7. Je vais supposer que vous avez apporté les modifications nécessaires à votre fichier JSON et que vous êtes prêt à essayer de l'importer. Créez un script PowerShell appelé "CreateReleasePipeline.ps1" avec l'exemple de script suivant.

$homeDir = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)"
$VSTS_RestApiHost = "https://vsrm.dev.Azure.com/yourpath/_apis"
$VSTS_PAT = "YOUR_PAT_TOKEN_HERE"
$headers = @{Authorization = "Basic " + [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($VSTS_PAT)"))}
$relDefInfo = Get-Content "$homeDir\ReleasePipelineTemplate-Formatted.json"
Write-Host "Creating Release Pipeline..."
$createReleaseDef = "$($VSTS_RestApiHost)/release/definitions?api-version=4.1-preview.3"
$response = Invoke-RestMethod -Method Post -Uri $createReleaseDef -Body $relDefInfo -ContentType 'application/json' -Headers $headers
Write-Host "Create Release Pipeline done. Pipeline id: $($response.id)"
if ($response.id -gt 0) {
  Write-Host "Release definition: succeeded."
}
Write-Host $response.id
  1. Exécutez votre script avec '.\CreateReleasePipeline.ps1' et la sortie ressemblera à ceci:
.\CreateReleasePipeline.ps1
Creating Release Pipeline...
Create Release Pipeline done. Pipeline id: 71
Release definition: succeeded.
71
  1. Actualisez votre page Web Release Pipeline et vous devriez voir votre Release Pipeline nouvellement créé.

  2. Vous pouvez continuer et réessayer jusqu'à ce que vous soyez satisfait de vos résultats.

J'utilise cette API REST pour mettre un modèle de définition de version dans le référentiel de code source afin de ne pas avoir à mettre à jour 50+ et développer des pipelines de version lorsque je leur apporte un ajustement. I peut un REST appel API vérifier si une définition de version existe, la créer si ce n'est pas le cas, la mettre à jour si elle n'est pas à jour. Tout cela sans avoir à me serrer la main mettez-les à jour manuellement ou créez un pipeline lorsqu'un nouveau get repo est créé. Je veux tout automatiser autant que possible. Je veux changer une fois ou aussi peu que possible et laisser le système se mettre à jour lui-même.

Veuillez me faire savoir si cela aide.

4
Antebios

Laissant ceci ici comme un addendum à la réponse acceptée.

La réponse acceptée fonctionne, mais je dois mentionner que mon problème initial n'a pas été résolu avec précision.

Fondamentalement, si vous n'avez aucune définition de version existante, il ne semble pas y avoir de moyen d'importer des définitions. Ce que j'ai fait était de créer une définition "factice", puis de suivre ce que dit la réponse acceptée. Créer au moins une définition vous amène à cet écran, sinon vous n'aurez que les écrans que je montre dans ma question.

1
reggaemahn

Après l'exportation, il génère un fichier json, enregistrez-le dans le dossier local. Et puis allez dans la version ou le bouton plus (+) cliquez dessus et vous pouvez voir l'option inport cliquez dessus et sélectionnez ce fichier json. et c'est tout.....

0
niks