Exercice – Publier un module dans un registre

Effectué

Dans votre entreprise de jouets, vous avez publié vos modules Bicep dans un registre. Vous avez exécuté manuellement le processus de publication à partir de votre propre ordinateur. À présent, vous souhaitez créer un pipeline pour gérer le processus de publication.

Dans cet exercice, vous allez :

  • Créez un registre de conteneurs pour vos modules Bicep.
  • Ajoutez une étape de lint au pipeline.
  • Ajoutez une étape de pipeline pour publier le module dans votre registre.
  • Vérifiez que votre pipeline s’exécute correctement.
  • Vérifiez le module publié dans votre registre.

Créer un registre de conteneur

Avant de pouvoir publier des modules, vous devez créer un registre pour votre organisation. Ici, vous utilisez le Portail Azure pour créer un registre.

  1. Dans votre navigateur, créez un registre de conteneurs dans le Portail Azure.

  2. Sous l’onglet Informations de base, sélectionnez votre abonnement cible et le groupe de ressources ToyReusable que vous avez créé précédemment.

  3. Entrez un nom pour votre registre et un emplacement proche de vous.

    Important

    Le nom du registre doit être unique dans Azure et contenir entre 5 et 50 caractères alphanumériques. Une coche en regard du nom du registre indique que le nom que vous avez choisi est disponible.

  4. Pour Référence (SKU) , sélectionnez De base.

    Conservez les valeurs par défaut pour les autres paramètres de configuration.

  5. Sélectionnez Revoir + créer.

    Capture d’écran du portail Azure montrant la page de création de registre de conteneurs.

  6. Vérifiez que les paramètres affichent Validation réussie, puis sélectionnez Créer.

    Attendez que le déploiement se termine, ce qui prend généralement 1 à 2 minutes.

  7. Lorsque le message Déploiement réussi s’affiche, sélectionnez Accéder à la ressource pour ouvrir le registre de conteneurs.

    Capture d’écran du portail Azure montrant le déploiement du registre de conteneurs, avec le bouton d’accès à une ressource mis en évidence.

  8. Dans la zone Présentation du registre de conteneurs, notez la valeur du paramètre Serveur de connexion. Ce sera quelque chose comme yourregistryname.azurecr.io.

    Capture d’écran du portail Azure montrant les détails du registre de conteneurs, avec le serveur de connexion mis en évidence.

    Vous aurez besoin de cette valeur dans un instant.

Ajouter un fichier de métadonnées de module

Dans l’unité précédente, vous avez découvert l’importance d’avoir une stratégie de contrôle de version pour vos modules. Vous avez également appris à utiliser des fichiers de métadonnées de module pour spécifier le numéro de version principale et secondaire de votre module dans un pipeline. Ici, vous ajoutez un fichier de métadonnées pour votre module de compte de stockage.

  1. Dans Visual Studio Code, développez le dossier modules/storage-account à la racine de votre dépôt.

  2. Créez un fichier appelé metadata.json.

    Capture d’écran de Visual Studio Code montrant l’emplacement du fichier metadata.JSON

  3. Ajoutez le contenu suivant au fichier :

    {
      "version": {
        "major": 1,
        "minor": 2
      }
    }
    

    Notez que dans le fichier de métadonnées, vous définissez séparément les numéros de version principale et secondaire. Votre pipeline combine ces numéros et le numéro de build du pipeline en un numéro de version complet chaque fois que le pipeline s’exécute.

  4. Enregistrez les modifications apportées au fichier.

Mettre à jour votre définition de pipeline et ajouter une étape lint

Votre dépôt contient un brouillon de pipeline que vous pouvez utiliser comme point de départ.

  1. Ouvrez le fichier pipeline.yml dans le dossier modules/storage-account.

  2. Mettez à jour la valeur de la variable d’environnement ModuleRegistryServer avec le nom du serveur de votre registre de conteneurs. Vous avez copié ce nom précédemment dans cet exercice.

    Par exemple, si le serveur de connexion de votre registre est votrenomderegistre.azurecr.io, il se présente comme suit :

    - name: ModuleRegistryServer
      value: yourregistryname.azurecr.io
    
  3. En bas du fichier, pour le commentaire # To be added avec la définition d’étape lint suivante :

    stages:
    
    - stage: Lint
      jobs:
      - job: LintCode
        displayName: Lint code
        steps:
          - script: |
              az bicep build --file $(ModuleFilePath)
            name: LintBicepCode
            displayName: Run Bicep linter
    

Ajouter une étape de publication à votre pipeline

Vous pouvez maintenant ajouter une deuxième étape pour publier le module dans votre registre de conteneurs.

  1. En bas du fichier pipeline.yml, définissez l’étape Publication et ajoutez une étape pour lire le numéro de version à partir du fichier metadata.json de votre module et définissez-le en tant que variable de pipeline.

    - stage: Publish
      jobs:
      - job: Publish
        steps:
          - script: |
              majorMinorVersionNumber=$(jq '(.version.major | tostring) + "." + (.version.minor | tostring)' $(ModuleMetadataFilePath) -r )
              versionNumber="$majorMinorVersionNumber.$(Build.BuildNumber)"
              echo "##vso[task.setvariable variable=ModuleVersion;]$versionNumber"
            name: GetModuleVersionNumber
            displayName: Get module version number
    

    L’étape exécute un script qui utilise l’application de ligne de commande jq pour analyser le fichier JSON.

  2. Sous l’étape que vous venez de créer, ajoutez une étape pour publier le module dans le registre.

    - task: AzureCLI@2
      name: Publish
      displayName: Publish module
      inputs:
        azureSubscription: $(ServiceConnectionName)
        scriptType: 'bash'
        scriptLocation: 'inlineScript'
        inlineScript: |
          az bicep publish \
            --target 'br:$(ModuleRegistryServer)/$(ModuleName):$(ModuleVersion)' \
            --file $(ModuleFilePath)
    

    Notez que cette étape construit dynamiquement la valeur de l’argument --target. Elle combine la valeur du serveur de registre, le nom du module et le numéro de version.

  3. Enregistrez les modifications apportées au fichier.

Vérifier et commiter votre définition de pipeline

  1. Vérifiez que votre fichier storage_account_module.yml ressemble à l’exemple suivant :

    trigger:
      batch: true
      branches:
        include:
        - main
      paths:
        include:
        - 'modules/storage-account/**'
    
    variables: 
    - name: ServiceConnectionName
      value: ToyReusable
    - name: ModuleName
      value: storage-account
    - name: ModuleRegistryServer
      value: yourregistryname.azurecr.io
    - name: ModuleFilePath
      value: modules/storage-account/main.bicep
    - name: ModuleMetadataFilePath
      value: modules/storage-account/metadata.json
    
    pool:
      vmImage: ubuntu-latest
    
    stages:
    
    - stage: Lint
      jobs:
      - job: LintCode
        displayName: Lint code
        steps:
          - script: |
              az bicep build --file $(ModuleFilePath)
            name: LintBicepCode
            displayName: Run Bicep linter
    
    - stage: Publish
      jobs:
      - job: Publish
        steps:
          - script: |
              majorMinorVersionNumber=$(jq '(.version.major | tostring) + "." + (.version.minor | tostring)' $(ModuleMetadataFilePath) -r )
              versionNumber="$majorMinorVersionNumber.$(Build.BuildNumber)"
              echo "##vso[task.setvariable variable=ModuleVersion;]$versionNumber"
            name: GetModuleVersionNumber
            displayName: Get module version number
          - task: AzureCLI@2
            name: Publish
            displayName: Publish module
            inputs:
              azureSubscription: $(ServiceConnectionName)
              scriptType: 'bash'
              scriptLocation: 'inlineScript'
              inlineScript: |
                az bicep publish \
                  --target 'br:$(ModuleRegistryServer)/$(ModuleName):$(ModuleVersion)' \
                  --file $(ModuleFilePath)
    

    Si ce n’est pas le cas, modifiez-le d’après cet exemple, puis enregistrez-le.

  2. Commitez et poussez (push) vos modifications à votre dépôt Git en exécutant les commandes suivantes dans le terminal Visual Studio Code :

    git add .
    git commit -m "Add lint and publish stages to storage account module pipeline"
    git push
    

    Immédiatement après votre envoi, Azure Pipelines démarre une nouvelle exécution du pipeline.

Surveiller le pipeline

  1. Dans votre navigateur, sélectionnez Pipelines>Pipelines.

  2. Sélectionnez l’exécution de pipeline active.

  3. L’exécution du pipeline s’affiche.

    Attendez la fin de l’exécution du pipeline. Le module Bicep est publié dans votre registre de conteneurs.

  4. Notez le numéro de build du pipeline, qui inclut la date d’aujourd’hui et un numéro de révision unique.

Passer en revue le module dans le registre

Vous pouvez également afficher le module publié dans le portail Azure.

  1. Dans votre navigateur, accédez au Portail Azure.

  2. Accédez au groupe de ressources ToyReusable.

  3. Sélectionnez le registre de conteneur précédemment créé.

  4. Sélectionnez le volet Dépôt dans le menu. Sélectionnez ensuite le dépôt modules\storage-account, qui représente le module publié par votre pipeline.

    Capture d’écran du portail Azure montrant le module Bicep dans le registre de conteneurs.

    Notez qu’il existe une balise unique, qui correspond au numéro de version du module publié par votre pipeline. La version principale (1) et la version mineure (2) correspondent aux numéros de version que vous avez définis dans le fichier metadata.json. Le numéro de révision (20230407.3) correspond au numéro de build du pipeline.

Nettoyer les ressources

Maintenant que vous avez terminé l’exercice, vous pouvez supprimer les ressources afin de ne pas avoir à payer pour.

Dans le terminal Visual Studio Code, exécutez la commande suivante :

az group delete --resource-group ToyReusable --yes --no-wait

Le groupe de ressources est supprimé en arrière-plan.

Remove-AzResourceGroup -Name ToyReusable -Force

Vous pouvez également supprimer la connexion du service et le projet Azure DevOps.

  • Connexion du service

    1. Dans le projet Azure DevOps, sélectionnez Paramètres du projet>Connexions de service.
    2. Sélectionnez ToyReusable.
    3. Dans le coin supérieur droit, sélectionnez les trois points pour Autres actions.
    4. Sélectionnez Supprimer et confirmez la suppression.
  • Inscription de l’application Azure

    1. Dans la page d’accueil du portail, recherchez Microsoft Entra ID et sélectionnez-le dans la liste des Services.
    2. Accédez à Gérer>inscriptions d'applications.
    3. Dans Applications supprimées, sélectionnez toy-reusable.
    4. Sélectionnez Supprimer définitivement et suivez les invites.
  • Azure DevOps Projects

    1. Dans le projet Azure DevOps, sélectionnez Paramètres du projet>Vue d’ensemble.
    2. Dans Supprimer le projet, sélectionnez Supprimer.
    3. Entrez le nom du projet et confirmez la suppression.