Logo Cinquin Andy Signature

Comment bloquer les nommages de branches sur Azure DevOps

Développeur Freelance - Logo

Les sites et les ressources associées

Comment bloquer les nommages de branches sur Azure DevOps

Publié le 27 mai 2024 -  par Andy Cinquin

Azure DevOpsPipeline YAMLBranchesOrganisationConvention de nommageGestion de ProjetDéveloppement logicielMéthodologie Agile

Dans cet article, on va voir comment bloquer les nommages de branches sur Azure DevOps en utilisant une pipeline YAML. Le but est de s'assurer que les branches respectent une convention de nommage spécifique, ce qui permet de garder une organisation claire et cohérente dans notre projet.

Prérequis

Avant de commencer, assurons-nous d'avoir les éléments suivants :
  • Un compte Azure DevOps
  • Un projet Azure DevOps
  • Des connaissances de base en YAML et en pipelines Azure DevOps

Mise en place

Voici comment j'ai fait pour mettre en place la validation du nommage des branches dans notre pipeline Azure DevOps.

1. Créer un fichier YAML

J'ai commencé par créer un nouveau fichier YAML dans notre projet Azure DevOps. Je l'ai nommé branch-naming-validation.yml, mais on peut choisir le nom qu'on veut.

2. Définir le trigger et les branches

Dans le fichier YAML, j'ai défini le trigger et les branches pour lesquelles on veut appliquer la validation du nommage :
trigger:
  - dev
  - main

pr:
  branches:
    include:
      - dev
      - main
Ici, on a défini le trigger pour les branches dev et main, ainsi que les pull requests ciblant ces branches.

3. Configurer le pool d'agents

Ensuite, j'ai configuré le pool d'agents sur lequel la pipeline sera exécutée :
pool:
  vmImage: ubuntu-latest
Dans cet exemple, on utilise une image Ubuntu comme agent.

4. Ajouter les étapes de validation

Maintenant, voici comment j'ai ajouté les étapes pour valider le nommage des branches :
steps:
  - bash: |
      echo "BUILD_SOURCEBRANCH: $BUILD_SOURCEBRANCH"
      echo "SYSTEM_PULLREQUEST_SOURCEBRANCH: $SYSTEM_PULLREQUEST_SOURCEBRANCH"
      
      if [[ "$BUILD_SOURCEBRANCH" =~ ^refs/pull/[0-9]+/merge$ ]]; then
        echo "Pull request detected. Extracting source branch name..."
        branch=$(echo "$SYSTEM_PULLREQUEST_SOURCEBRANCH" | sed 's/^refs\/heads\///')
      else
        echo "Regular branch detected. Extracting branch name..."
        branch=$(echo "$BUILD_SOURCEBRANCH" | sed 's/^refs\/heads\///')
      fi
      
      echo "Extracted branch name: $branch"
      
      echo "Checking if branch name matches the allowed patterns..."
      if [[ "$branch" =~ ^(main|dev|[a-zA-Z0-9]+/#[0-9]+-(.*))$ ]]; then
        echo "Valid branch name: $branch"
      else
        echo "Invalid branch name: $branch"
        echo "Branch name does not match the allowed patterns."
        echo "Allowed patterns:"
        echo " - main"
        echo " - dev"  
        echo " - [folder]/[#ticketnumber]-[*]"
        exit 1
      fi
    displayName: 'Branch name validation'
Cette étape utilise un script Bash pour extraire le nom de la branche à partir des variables d'environnement BUILD_SOURCEBRANCH et SYSTEM_PULLREQUEST_SOURCEBRANCH. Ensuite, on vérifie si le nom de la branche correspond aux modèles autorisés en utilisant une expression régulière.
Les modèles autorisés qu'on a définis sont :
  • main
  • dev
  • [folder]/[#ticketnumber]-[*]
Si le nom de la branche ne correspond pas à l'un de ces modèles, la pipeline échouera avec un message d'erreur indiquant les modèles autorisés.

5. Ajouter des étapes supplémentaires (facultatif)

J'ai également ajouté d'autres étapes à notre pipeline pour effectuer des tâches supplémentaires, comme l'installation de Node.js, l'exécution de tests, la vérification de Prettier, le linting et la construction de l'application :
  - task: NodeTool@0
    inputs:
      versionSpec: '20.x'
    displayName: 'Install Node.js'

  - script: |
      npm install --legacy-peer-deps
    displayName: 'npm install'
    
  - script: |
      npm run prettier:check
    displayName: 'Run Prettier check'
    
  - script: |
      npm run lint
    displayName: 'Run linting'
    
  - script: |
      npm run build
    displayName: 'Build the application'
Ces étapes sont spécifiques à notre projet Node.js, mais on peut les adapter en fonction des besoins de notre projet.

Conclusion

Voilà comment j'ai mis en place une pipeline Azure DevOps qui valide le nommage des branches et s'assure qu'elles respectent notre convention de nommage spécifique. Cela nous aide à maintenir une organisation claire et cohérente dans notre projet, facilitant ainsi la collaboration et la gestion des branches.
N'oublions pas d'adapter les modèles de nommage des branches en fonction des conventions de notre équipe ou de notre entreprise. On peut également ajouter des étapes supplémentaires à la pipeline pour répondre aux besoins spécifiques de notre projet.
En implémentant cette validation de nommage des branches dans notre pipeline Azure DevOps, on peut automatiser l'application des conventions de nommage et maintenir une structure de branches propre et organisée.



En vous remerciant de votre visite, n'hésitez pas à me contacter pour toute demande de renseignements, devis ou proposition de collaboration. Je me ferai un plaisir de vous répondre dans les plus brefs délais.
Vous avez aimé cet article ? N'hésitez pas à le partager !

DÉVELOPPONS ENSEMBLE VOS PROJETS

Une idée, un projet ? Je suis là pour répondre à vos demandes et vous accompagner.
N’hésitez pas, je serais ravi d’échanger avec vous sur votre projet !
© 2024 Andy Cinquin - Tous droits réservés - Developed & Designed with ❤️ 🐝 ForHives co-founders