Exercice : ajouter une tâche de déploiement Bicep au pipeline

Effectué

Vous avez créé un pipeline de base et vous avez configuré vos environnements Azure et Azure Pipelines pour qu’ils se connectent. Vous êtes maintenant prêt à déployer le fichier Bicep de votre site web sur Azure à partir de votre pipeline.

Dans cet exercice, vous allez :

  • Ajoutez un fichier Bicep à votre référentiel.
  • Ajoutez une étape de pipeline pour déployer votre fichier Bicep.
  • Exécutez à nouveau votre pipeline et assurez-vous qu’il a correctement déployé votre site web.

Ajouter le fichier Bicep de votre site web au référentiel Git

Vous avez déjà préparé le fichier Bicep de votre site web. Vous pouvez utiliser le fichier Bicep pour déployer différentes configurations des ressources du site web, en fonction de l’environnement et de la configuration. Ici, vous ajoutez votre fichier Bicep au référentiel.

  1. Ouvrez l’explorateurde Visual Studio Code.

  2. Dans le dossier deploy, créez un fichier appelé main.bicep. Veillez à créer ce fichier dans le dossier deploy et non à la racine du référentiel :

    Capture d’écran de l’explorateur de Visual Studio Code, avec le fichier main.bicep en surbrillance dans le dossier deploy.

  3. Copiez le code suivant dans le fichier main.bicep :

    @description('The Azure region into which the resources should be deployed.')
    param location string = resourceGroup().location
    
    @description('The type of environment. This must be nonprod or prod.')
    @allowed([
      'nonprod'
      'prod'
    ])
    param environmentType string
    
    @description('Indicates whether to deploy the storage account for toy manuals.')
    param deployToyManualsStorageAccount bool
    
    @description('A unique suffix to add to resource names that need to be globally unique.')
    @maxLength(13)
    param resourceNameSuffix string = uniqueString(resourceGroup().id)
    
    var appServiceAppName = 'toy-website-${resourceNameSuffix}'
    var appServicePlanName = 'toy-website-plan'
    var toyManualsStorageAccountName = 'toyweb${resourceNameSuffix}'
    
    // Define the SKUs for each component based on the environment type.
    var environmentConfigurationMap = {
      nonprod: {
        appServicePlan: {
          sku: {
            name: 'F1'
            capacity: 1
          }
        }
        toyManualsStorageAccount: {
          sku: {
            name: 'Standard_LRS'
          }
        }
      }
      prod: {
        appServicePlan: {
          sku: {
            name: 'S1'
            capacity: 2
          }
        }
        toyManualsStorageAccount: {
          sku: {
            name: 'Standard_ZRS'
          }
        }
      }
    }
    
    var toyManualsStorageAccountConnectionString = deployToyManualsStorageAccount ? 'DefaultEndpointsProtocol=https;AccountName=${toyManualsStorageAccount.name};EndpointSuffix=${environment().suffixes.storage};AccountKey=${toyManualsStorageAccount.listKeys().keys[0].value}' : ''
    
    resource appServicePlan 'Microsoft.Web/serverfarms@2022-03-01' = {
      name: appServicePlanName
      location: location
      sku: environmentConfigurationMap[environmentType].appServicePlan.sku
    }
    
    resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
        siteConfig: {
          appSettings: [
            {
              name: 'ToyManualsStorageAccountConnectionString'
              value: toyManualsStorageAccountConnectionString
            }
          ]
        }
      }
    }
    
    resource toyManualsStorageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = if (deployToyManualsStorageAccount) {
      name: toyManualsStorageAccountName
      location: location
      kind: 'StorageV2'
      sku: environmentConfigurationMap[environmentType].toyManualsStorageAccount.sku
    }
    
  4. Enregistrez les modifications apportées au fichier.

  5. Dans le terminal Visual Studio Code, indexez les modifications, validez-les et envoyez-les à votre référentiel à l’aide du code suivant :

    git add deploy/main.bicep
    git commit -m 'Add Bicep file'
    git push
    

Remplacer les étapes du pipeline

Ensuite, mettez à jour votre définition de pipeline pour déployer votre fichier Bicep sur Azure à l’aide de la connexion de service.

  1. Dans Visual Studio Code, ouvrez le fichier deploy/azure-pipelines.yml.

  2. Avant la ligne jobs:, ajoutez variables: pour définir une variable nommée deploymentDefaultLocation :

    trigger: none
    
    pool:
      vmImage: ubuntu-latest
    
    variables:
    - name: deploymentDefaultLocation
      value: westus3
    
    jobs:
    
  3. Pour supprimer l’étape script de la définition du pipeline, effacez les deux dernières lignes du fichier.

    Conseil

    Lorsque vous travaillez dans Visual Studio Code et que vous avez installé l’extension Azure Pipelines, essayez d’utiliser la combinaison de touches Ctrl+espace. Un menu contextuel s’affiche, avec les éléments suggérés à ajouter à la position actuelle du curseur.

  4. En bas du fichier, ajoutez une tâche qui utilise la tâche AzureResourceManagerTemplateDeployment pour déployer votre fichier Bicep :

    jobs:
    - job:
      steps:
    
      - task: AzureResourceManagerTemplateDeployment@3
        inputs:
          connectedServiceName: $(ServiceConnectionName)
          deploymentName: $(Build.BuildNumber)
          location: $(deploymentDefaultLocation)
          resourceGroupName: $(ResourceGroupName)
          csmFile: deploy/main.bicep
          overrideParameters: >
            -environmentType $(EnvironmentType)
            -deployToyManualsStorageAccount $(DeployToyManualsStorageAccount)
    

    Notes

    Il est préférable de taper ce code vous-même plutôt que de le copier et de le coller à partir de ce module. Prêtez attention à la mise en retrait du fichier. Si la mise en retrait n’est pas correcte, votre fichier YAML ne sera pas valide. Visual Studio Code indique les erreurs par un soulignement ondulé.

    Cette étape utilise une variable système $(Build.BuildNumber), pour nommer le déploiement. La variable peut vous aider à identifier facilement le pipeline dans auquel un déploiement correspond.

    La propriété de tâche location est requise par la tâche AzureResourceManagerTemplateDeployment. Il spécifie la région Azure dans laquelle un groupe de ressources doit être créé. Dans cet exercice, vous avez déjà créé un groupe de ressources et l’emplacement que vous spécifiez ici n’a pas d’importance. Mais vous devez quand même fournir la valeur. Ici, vous la définissez sur la valeur de la variable deploymentDefaultLocation que vous avez définie à l’étape précédente.

  5. Enregistrez les modifications apportées au fichier. Votre fichier se présente ainsi :

    trigger: none
    
    pool:
      vmImage: ubuntu-latest
    
    variables:
    - name: deploymentDefaultLocation
      value: westus3
    
    jobs:
    - job:
      steps:
    
      - task: AzureResourceManagerTemplateDeployment@3
        inputs:
          connectedServiceName: $(ServiceConnectionName)
          deploymentName: $(Build.BuildNumber)
          location: $(deploymentDefaultLocation)
          resourceGroupName: $(ResourceGroupName)
          csmFile: deploy/main.bicep
          overrideParameters: >
            -environmentType $(EnvironmentType)
            -deployToyManualsStorageAccount $(DeployToyManualsStorageAccount)
    
  6. Dans le terminal Visual Studio Code, indexez vos modifications, validez-les dans votre référentiel et envoyez-les à Azure Repos :

    git add deploy/azure-pipelines.yml
    git commit -m 'Add deployment task to pipeline'
    git push
    

Ajouter des variables de pipeline

  1. Dans votre navigateur, sélectionnez Pipelines.

    Capture d’écran d’Azure DevOps montrant le menu, avec Pipelines en évidence.

  2. Sélectionnez votre pipeline.

    Capture d’écran d’Azure DevOps montrant la liste des pipelines, avec le pipeline toy-website en surbrillance.

  3. Sélectionnez Modifier.

    Capture d’écran d’Azure DevOps qui montre le pipeline, avec Modifier en surbrillance.

  4. Sélectionnez Variables.

    Capture d’écran Azure DevOps montrant l’éditeur de pipeline, avec le bouton Variables en surbrillance.

  5. Sélectionnez Nouvelle variable.

    Capture d’écran d’Azure DevOps avec l’éditeur de variable de pipeline, avec le bouton Nouvelle variable en surbrillance.

  6. Dans Nom, entrez ServiceConnectionName. Dans Valeur, entrez ToyWebsite.

    N’activez pas les cases à cocher, puis sélectionnez OK.

    Capture d’écran d’Azure DevOps montrant l’éditeur de variable de pipeline, avec le bouton OK en surbrillance.

  7. Pour créer d’autres variables, sélectionnez +.

    Capture d’écran d’Azure DevOps montrant la liste des variables du pipeline, avec le bouton Plus en évidence.

    Créez les variables suivantes de la même façon que vous avez créé la variable ServiceConnectionName :

    Nom de la variable Valeur
    ResourceGroupName ToyWebsite
    EnvironmentType nonprod
  8. Suivez de nouveau les étapes pour créer une variable DeployToyManualsStorageAccount avec la valeur true. Pour cette variable, sélectionnez la case Permettre aux utilisateurs de remplacer cette valeur lors de l’exécution du pipeline.

    Capture d’écran d’Azure DevOps montrant l’éditeur de variables du pipeline.

  9. Une fois que vous avez créé les quatre variables, sélectionnez Enregistrer.

    Capture d’écran d’Azure DevOps montrant l’éditeur de variable de pipeline, avec le bouton Enregistrer en surbrillance.

Exécuter votre pipeline

Vous êtes maintenant prêt à exécuter votre pipeline. !

Votre modèle comprend un compte de stockage, que votre équipe de site web utilise pour stocker les manuels d’instructions des jouets. Étant donné que vous êtes encore en train de tester votre environnement, vous n’avez pas besoin de déployer le compte de stockage chaque fois que vous déployez le site web. Vous avez donc créé un paramètre Bicep pour contrôler si le compte de stockage est déployé. Ici, vous exécutez le pipeline et vous remplacez le déploiement afin qu’il ne déploie pas le compte de stockage cette fois-ci.

  1. Sélectionnez Exécuter.

    Capture d’écran d’Azure DevOps montrant le pipeline, avec le bouton Exécuter en évidence.

    Le volet Exécuter le pipeline s’affiche. Dans ce volet, vous pouvez configurer les paramètres de cette exécution spécifique du pipeline.

  2. Sélectionnez Variables.

    Capture d’écran d’Azure DevOps montrant la page Exécuter le pipeline, avec l’élément de menu Variables en surbrillance.

  3. Sélectionnez la variable DeployToyManualsStorageAccount et remplacez sa valeur par false. Sélectionnez ensuite Mettre à jour.

    Capture d’écran d’Azure DevOps montrant l’éditeur de variable Exécuter le pipeline, avec le bouton Mettre à jour en surbrillance.

  4. Sélectionnez la flèche de retour.

    Capture d’écran d’Azure DevOps montrant la page Exécuter le pipeline, avec la flèche de retour en surbrillance.

  5. Sélectionnez Exécuter pour démarrer une nouvelle exécution du pipeline. Le démarrage du pipeline peut prendre quelques minutes. Une fois le pipeline démarré, le déploiement peut prendre quelques minutes.

  6. Pour ouvrir le travail, dans la section Travaux , sélectionnez Travail. Vous pouvez surveiller la tâche pendant son exécution ou attendre la fin de la tâche pour examiner son historique.

    Attendez que le travail se termine.

  7. Sélectionnez Tâche.

    Capture d’écran d’Azure DevOps montrant la page de travail, avec l’élément de menu Travail en évidence.

  8. Sélectionnez 1 variable de file d’attente utilisée.

    Capture d’écran d’Azure DevOps montrant le journal de pipeline, avec l’élément 1 variable de temps de file d’attente utilisée en surbrillance.

    La valeur remplacée pour cette exécution de pipeline est affichée. La valeur de la variable DeployToyManualsStorageAccount est false, car vous avez remplacé la valeur d’origine.

  9. Inspectez le reste de la sortie de votre pipeline.

    Le pipeline indique un déploiement réussi.

Vérifier le déploiement

  1. Accédez au portail Azure.

  2. Dans le menu de gauche, sélectionnez Groupe de ressources.

  3. Sélectionnez ToyWebsite.

  4. Dans Vue d’ensemble, affichez l’état du déploiement. Vous voyez qu’un déploiement a réussi.

    Capture d’écran du portail Azure montrant le groupe de ressources avec un déploiement réussi.

  5. Sélectionnez 1 réussi pour afficher les détails du déploiement.

    Capture d’écran du portail Azure avec l’historique de déploiement du groupe de ressources et le déploiement mis en surbrillance.

    Le nom du déploiement est le même que le nom de l’exécution du pipeline.

  6. Pour voir quelles ressources ont été déployées, sélectionnez le déploiement. Pour développer le déploiement et afficher plus de détails, sélectionnez Détails du déploiement. Dans ce cas, il existe un plan et une application Azure App Service.

    Capture d’écran du portail Azure avec les détails du déploiement du groupe de ressources et les ressources App Service mises en surbrillance.