web-dev-qa-db-fra.com

Définition de la balise git de Azure Devops Construire un pipeline complète

J'essaie de définir une étiquette avec le numéro de version actuel déterminé par Gitversion sur le Git Engagez à la fin d'une construction réussie. On se sent comme si je ne peux pas être le premier à le faire, mais je me débats pour trouver quelque chose qui fonctionne.

Azure Devops Pipeline a une fonctionnalité pour obtenir des sources sur "Sources d'étiquettes" sur le succès. J'ai défini cela et défini sur une variable définie par l'une des tâches de l'agent que j'ai (Gitversion)

Tag Sources

Je peux voir dans les journaux de débogage que cette variable se définit définie par le composant de gitverversion que j'ai ajouté au pipeline.

2019-12-06T20:54:20.2390794Z ##[debug]Processed: ##vso[task.setvariable variable=GitVersion.MajorMinorPatch;]2.98.0

Toutefois, si je le quitte comme cela, je reçois une balise créée comme "V $ (gitversion.majorminorpatch)", ce qui signifie qu'à l'époque où la balise est créée que cette variable n'existe plus.

Le format TAG Aide ToolTip dit

"Le format des balises pourrait être une combinaison de variables définies par l'utilisateur ou prédéfinies ayant une portée de" tous ". Par exemple: '$ (Build.definitionName) $ (build.definitionversion) $ (Build.buildid) $ (Build.buildNumber) $ (my.variable) '"

Je suppose donc que le problème est que cette variable créée pendant le pipeline n'a pas de portée de tous.

J'ai ensuite essayé d'ajouter une variable de pipeline au pipeline de "gitversion.majorminorpatch" avec l'espoir que c'était à la bonne portée et espérant que lorsque la commande "Task.setVariable" est exécutée, cela définira la valeur variable de cette version supérieure variable scopée.

enter image description here

Cependant, dans ce cas, je viens de recevoir un tag "V" créé.

Donc, je suis un peu coincé. D'une manière ou d'une autre, je dois pouvoir créer ou définir de manière dynamique une variable de portée avec la valeur que je veux baliser ici.

Je serais vraiment reconnaissant de toutes les idées à ce sujet.

9
Brett

Si vous faites un pipeline YAML, vous pouvez ajouter les étapes suivantes.

- checkout: self
  persistCredentials: true

## Rest of pipeline ##

- script: |
     git tag $(GitVersion.NugetVersionV2)
     git Push Origin $(GitVersion.NugetVersionV2)
  workingDirectory: $(Build.SourcesDirectory)

Le persistCredentials permet au jeton d'être automatiquement transmis à d'autres commandes GIT. Notez l'affectation de workingDirectory, sinon j'ai eu une erreur que l'emplacement n'était pas un référentiel Git.

Pour une tag annotée plutôt que sur une étiquette légère, la syntaxe ressemblerait à ceci ...

- script: |
     git tag -a <tagname> -m <message>

Pour obtenir un utilisateur/date contre celui-ci, vous devez Définir le nom d'utilisateur/email aussi bien par ex.

- script: |
    git config --global user.name "BuildService"
    git config --global user.email "[email protected]"
    git tag -a <tagname> -m <message>

Pour que cela fonctionne, le Serveur de construction de la collection de projets compte (pas le Comptes de service de projet de projet Groupe ) doit être attribué la permission de contribution pour les référentiels

3
Paul Hatcher

Élargir sur l'excellente réponse de Paul Hatcher, j'aimerais ajouter que pour moi, le compte s'appelait Project Collection Build Service Dans Azure Devops Server 2019. Cela semble également être conforme à la page actuelle Microsoft Documentation .

Désolé pour la réponse, ma réputation ne suffit pas encore à commenter.

1
MatthiasSchuchardt