Exécuter des commandes Git dans un script

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019

Pour certains flux de travail, vous avez besoin de votre pipeline de build pour exécuter des commandes Git. Par exemple, une fois qu’une build CI sur une branche de fonctionnalité est terminée, l’équipe peut souhaiter fusionner la branche dans l’élément principal.

Git est disponible sur les agents hébergés par Microsoft et sur les agents locaux.

Activer les scripts pour exécuter des commandes Git

Notes

Avant de commencer, assurez-vous que l’identité par défaut de votre compte est définie avec le code suivant. Cette opération doit être effectuée en tant que première étape après l’extraction de votre code.

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

Accorder des autorisations de gestion de version au service de build

  1. Accédez à la page des paramètres de projet pour votre organisation dans Paramètres de l’organisation>Général>Projets.

    Sélectionnez les paramètres de votre organisation.

  2. Sélectionnez le projet à modifier.

    Sélectionnez votre projet.

  3. Dans Paramètres du projet, sélectionnez Référentiels. Sélectionnez le référentiel sur lequel vous souhaitez exécuter des commandes Git.

  4. Sélectionnez Sécurité pour modifier la sécurité de votre référentiel.

    Choisissez Sécurité pour modifier la sécurité de votre référentiel.

  5. Cherchez Service de build de collection de projets. Choisissez l’identité {{nom de votre projet}} Build Service ({votre organisation}) (et non le groupe Project Collection Build Service Accounts ({votre organisation})). Par défaut, cette identité peut lire à partir du référentiel, mais ne peut pas lui renvoyer (push) de modifications. Accordez les autorisations nécessaires pour les commandes Git que vous souhaitez exécuter. En règle générale, vous devriez octroyer :

    • Créer une branche : Autoriser
    • Contribuer : Autoriser
    • Lire : Autoriser
    • Créer une balise : Autoriser

Accédez à l’onglet du panneau de configuration Gestion de version

  • Azure Repos : https://dev.azure.com/{your-organization}/{your-project}/_admin/_versioncontrol

  • Localement : https://{your-server}:8080/tfs/DefaultCollection/{your-project}/_admin/_versioncontrol

gérer le projet

Si cette page s’affiche, sélectionnez le référentiel, puis sélectionnez le lien :

panneau de configuration du haut au projet

onglet gestion de version du panneau de configuration du projet

Sous l’onglet Gestion de version, sélectionnez le référentiel dans lequel vous souhaitez exécuter des commandes Git, puis sélectionnez Service de build de collection de projets. Par défaut, cette identité peut lire à partir du référentiel, mais ne peut pas lui renvoyer (push) de modifications.

autorisations

Accordez les autorisations nécessaires pour les commandes Git que vous souhaitez exécuter. En règle générale, vous devriez octroyer :

  • Créer une branche : Autoriser
  • Contribuer : Autoriser
  • Lire : Autoriser
  • Créer une balise : Autoriser

Lorsque vous avez terminé d’accorder les autorisations, veillez à sélectionner Enregistrer les modifications.

Autoriser les scripts à accéder au jeton système

Ajoutez une section checkout avec persistCredentials défini sur true.

steps:
- checkout: self
  persistCredentials: true

En savoir plus sur checkout.

Sous l’onglet Options, sélectionnez Autoriser les scripts à accéder au jeton OAuth.

Veillez à propre le référentiel local

Certains types de modifications apportées au référentiel local ne sont pas automatiquement nettoyés par le pipeline de build. Assurez-vous donc de :

  • Supprimer les branches locales que vous créez.
  • Annuler les modifications de configuration git.

Si vous rencontrez des problèmes en utilisant un agent local, assurez-vous que le référentiel est nettoyé :

Vérifiez que checkout a clean défini sur true.

steps:
- checkout: self
  clean: true

Exemples

Répertorier les fichiers de votre référentiel

Dans l’onglet Générer, ajoutez la tâche suivante :

Tâche Arguments

Utilitaire : Ligne de commande
Répertoriez les fichiers dans le dépôt Git.
Outil : git

Arguments : ls-files

Fusionner une branche de fonctionnalité vers la branche primaire

Vous souhaitez qu’une build CI soit fusionnée avec la primaire si la build réussit.

Sous l’onglet Déclencheurs, sélectionnez Intégration continue (CI) et incluez les branches que vous souhaitez générer.

Créez merge.bat à la racine de votre référentiel :

@echo off
ECHO SOURCE BRANCH IS %BUILD_SOURCEBRANCH%
IF %BUILD_SOURCEBRANCH% == refs/heads/main (
   ECHO Building main branch so no merge is needed.
   EXIT
)
SET sourceBranch=origin/%BUILD_SOURCEBRANCH:refs/heads/=%
ECHO GIT CHECKOUT MAIN
git checkout main
ECHO GIT STATUS
git status
ECHO GIT MERGE
git merge %sourceBranch% -m "Merge to main"
ECHO GIT STATUS
git status
ECHO GIT PUSH
git push origin
ECHO GIT STATUS
git status

Sous l’onglet build, ajoutez ceci comme dernière tâche :

Tâche Arguments

Utilitaire : Script de commandes par lot
Exécutez merge.bat.
Path (Chemin d’accès) : merge.bat

Questions fréquentes (FAQ)

Puis-je exécuter des commandes Git si mon référentiel distant se trouve dans GitHub ou un autre service Git tel que Bitbucket Cloud ?

Yes

Quelles tâches puis-je utiliser pour exécuter des commandes Git ?

Script de commandes par lot

Ligne de commande

PowerShell

Script d'interpréteur de commandes

Comment éviter de déclencher une build CI lorsque le script envoie (push) ?

Ajoutez ***NO_CI*** à votre message de validation. Voici quelques exemples :

  • git commit -m "This is a commit message ***NO_CI***"
  • git merge origin/features/hello-world -m "Merge to main ***NO_CI***"

Ajoutez [skip ci] à votre message de validation ou à votre description. Voici quelques exemples :

  • git commit -m "This is a commit message [skip ci]"
  • git merge origin/features/hello-world -m "Merge to main [skip ci]"

Vous pouvez également utiliser l’une de ces variantes pour les validations sur Azure Repos Git, Bitbucket Cloud, GitHub et GitHub Enterprise Server.

  • [skip ci] ou [ci skip]
  • skip-checks: true ou skip-checks:true
  • [skip azurepipelines] ou [azurepipelines skip]
  • [skip azpipelines] ou [azpipelines skip]
  • [skip azp] ou [azp skip]
  • ***NO_CI***

Ai-je besoin d’un agent ?

Vous avez besoin d’au moins un agent pour exécuter votre build ou mise en production.

Je fais face à des problèmes. Comment puis-je les résoudre ?

Consultez Résoudre les problèmes liés à la création et à la mise en production.

Je ne peux pas sélectionner un pool d’agents par défaut et je ne peux pas mettre ma build ou ma mise en production en attente. Comment la corriger ?

Consultez les Pools d’agents.

Ma tâche envoi (push) NuGet échoue avec l’erreur suivante : « Erreur : impossible d’obtenir le certificat émetteur local ». Comment puis-je résoudre ce problème ?

Cela peut être résolu en ajoutant un certificat racine approuvé. Vous pouvez ajouter la variable d’environnement NODE_EXTRA_CA_CERTS=file à votre agent de build ou ajouter la variable de tâche NODE.EXTRA.CA.CERTS=file dans votre pipeline. Pour plus d’informations sur cette variable, consultez la documentation Node.js. Consultez Définir des variables dans un pipeline pour obtenir des instructions sur la définition d’une variable dans votre pipeline.

J’utilise TFS localement et je ne vois pas certaines de ces fonctionnalités. Pourquoi cela ne fonctionne-t-il pas ?

Certaines de ces fonctionnalités sont disponibles uniquement sur Azure Pipelines et ne sont pas encore disponibles localement. Certaines fonctionnalités sont disponibles localement si vous avez effectué une mise à niveau vers la dernière version de TFS.