Partager via


Exécuter des commandes Git dans des scripts de pipeline

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

Les commandes Git sont disponibles pour générer des flux de travail sur des agents hébergés par Microsoft et auto-hébergés . Par exemple, après la fin d’une build d’intégration continue (CI) sur une branche de fonctionnalité, vous pouvez fusionner la branche vers la branche principale. Cet article explique comment exécuter des commandes Git dans des scripts de génération Azure Pipelines.

Activer les scripts pour exécuter des commandes Git

Vérifiez que GitHub utilise l’identité par défaut de votre compte Azure DevOps. Si nécessaire, définissez l’utilisateur GitHub comme première étape après l’extraction.

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

Accorder des autorisations au service de build

Le service de génération de projet doit disposer des autorisations nécessaires pour écrire dans le référentiel source. Définissez les autorisations requises comme suit :

  1. Dans les paramètres du projet de votre projet, sélectionnez Référentiels sous Dépôts.

  2. Dans la page Tous les référentiels , sélectionnez Sécurité pour définir des autorisations pour tous les dépôts du projet. Vous pouvez également sélectionner le référentiel sur lequel vous souhaitez exécuter des commandes Git, puis sélectionner Sécurité sur la page de ce dépôt.

    Sreenshot qui montre la sélection de sécurité pour les référentiels.

  3. Dans la page Autorisations de l’utilisateur , sélectionnez l’identité du service de build . Veillez à sélectionner <le nom> du projet Build Service (<organisation>) sous Utilisateurs, et non pas Comptes de service de génération de regroupement de projets. Par défaut, cette identité peut lire à partir du dépôt, mais ne peut pas y envoyer de modifications.

  4. Faites défiler la liste et sélectionnez Autoriser en regard de chaque autorisation nécessaire pour les commandes Git que vous souhaitez exécuter, généralement Créer une branche, Contribuer, Lire et Créer une balise.

    Capture d’écran montrant l’octroi des autorisations d’identité aux référentiels.

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

Pour autoriser les scripts à accéder au jeton OAuth GitHub :

Ajoutez une checkout étape à votre pipeline YAML avec persistCredentials la valeur définie sur true.

steps:
- checkout: self
  persistCredentials: true

Pour plus d’informations sur l’étape checkout , consultez la steps.checkout définition.

Nettoyer le dépôt local

Le pipeline de build ne nettoie pas automatiquement certaines modifications apportées au référentiel local, telles que la suppression de branches locales ou l’annulation des modifications locales git config . Si vous rencontrez des problèmes à l’aide d’un agent auto-hébergé, vous pouvez nettoyer le dépôt avant d’exécuter la build.

En général, pour des performances plus rapides des agents auto-hébergés, ne nettoyez pas le dépôt. Le nettoyage n’est pas efficace pour les agents hébergés par Microsoft, car ils utilisent un nouvel agent à chaque fois. Pour plus d’informations, consultez Nettoyer le dépôt local sur l’agent.

Pour nettoyer le dépôt avant d’exécuter la build :

Défini clean sur true l’étape checkout . Cette option s’exécute git clean -ffdx suivie de git reset --hard HEAD la récupération.

steps:
- checkout: self
  clean: true

Sélectionnez Variables dans l’éditeur de pipeline, créez ou modifiez la Build.Clean variable, puis définissez sa valeur sourcesur .

Exemples de commandes Git

Les exemples suivants exécutent des commandes Git dans une tâche de ligne de commande et une tâche de script Batch .

Répertorier les fichiers dans votre dépôt

Pour répertorier les fichiers du dépôt Git, utilisez la tâche de ligne de commande dans un pipeline YAML comme suit :

- task: CmdLine@2
  inputs:
    script: 'git ls-files'

Fusionner une branche de fonctionnalité vers la branche principale

L’exemple de pipeline Classique suivant fusionne une build CI si main la build réussit.

  1. Créez un fichier appelé merge.bat à la racine de votre dépôt avec le contenu suivant :

    @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
    
  2. Sous l’onglet Déclencheurs de votre pipeline Classique, cochez la case pour activer l’intégration continue.

  3. Sous Filtres de branche et Filtres de chemin d’accès, sélectionnez les branches et les chemins d’accès à Inclure ou Exclure de la build.

  4. Ajoutez un script Batch comme dernière tâche dans votre pipeline.

  5. Sous Chemin d’accès dans la configuration de la tâche, entrez l’emplacement et le nom du fichier merge.bat .

Questions fréquentes (FAQ)

Puis-je exécuter des commandes Git si mon dépôt distant se trouve dans GitHub ou un autre service Git tel que Bitbucket Cloud ?

Oui, vous pouvez exécuter des commandes Git si votre dépôt distant se trouve dans GitHub ou un autre service Git tel que Bitbucket Cloud.

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

Vous pouvez utiliser les tâches Azure Pipelines suivantes pour exécuter des commandes Git :

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

Pour éviter de déclencher une build CI lorsque le script envoie (push) le script, ajoutez-y [skip ci] votre message de validation ou description. Par exemple:

  • 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 des variantes suivantes pour les validations sur Azure Repos Git, Bitbucket Cloud, GitHub ou 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 pour exécuter des pipelines ?

Oui, vous avez besoin d’au moins un agent pour exécuter votre pipeline de build ou de mise en production.

Comment puis-je résoudre les problèmes ?

Consultez Résoudre les problèmes d’exécutions de pipeline.

Comment puis-je résoudre l’impossibilité de sélectionner un pool d’agents par défaut ou de mettre en file d’attente mon exécution de pipeline ?

Consultez Créer et gérer des pools d’agents.

Comment puis-je corriger l’échec de ma tâche Push NuGet avec « Erreur : impossible d’obtenir le certificat émetteur local » ?

Vous pouvez résoudre ce problème en ajoutant un certificat racine approuvé. Ajoutez la variable d’environnement NODE_EXTRA_CA_CERTS=file à votre agent de build ou ajoutez la NODE.EXTRA.CA.CERTS=file variable de tâche dans votre pipeline.

Pour plus d’informations sur cette variable, consultez NODE_EXTRA_CA_CERTS=file dans la documentation Node.js. Pour obtenir des instructions sur la définition d’une variable dans votre pipeline, consultez Définir des variables dans un pipeline.

Pourquoi ne vois-je pas certaines de ces fonctionnalités dans mon serveur Azure DevOps local ?

Certaines de ces fonctionnalités sont disponibles uniquement sur Azure DevOps Services et non disponibles pour le serveur Azure DevOps local. Certaines fonctionnalités sont disponibles uniquement dans la dernière version d’Azure DevOps Server.