Tutoriel : déployer une application Java sur un groupe de machines virtuelles identiques

Azure DevOps Services

Un groupe de machines virtuelles identiques vous permet de déployer et de gérer des machines virtuelles identiques à mise à l’échelle automatique.

Les machines virtuelles sont créées en fonction des besoins dans un groupe identique. En définissant des règles, vous pouvez contrôler quand et comment les VM sont ajoutées au groupe identique ou supprimées de celui-ci. Ces règles peuvent être déclenchées en fonction de métriques telles que la charge du processeur, l’utilisation de la mémoire ou le trafic réseau.

Dans ce tutoriel, vous générez une application Java et la déployez sur un groupe de machines virtuelles identiques. Vous allez apprendre à effectuer les actions suivantes :

  • Créer un groupe de machines virtuelles identiques
  • Générer une image de machine
  • Déployer une image personnalisée sur un groupe de machines virtuelles identiques

Prérequis

Avant de commencer, vous avez besoin des éléments suivants :

Configurer votre pipeline Java

  1. Connectez-vous à votre organisation Azure DevOps et accédez à votre projet.

  2. Accédez à Pipelines, puis sélectionnez Nouveau pipeline ou Création d’un pipeline si vous créez votre premier pipeline.

  3. Effectuez les étapes de l’Assistant en sélectionnant d’abord GitHub comme emplacement du code source.

  4. Vous serez peut-être redirigé vers GitHub pour vous connecter. Si c’est le cas, entrez vos informations d’identification GitHub.

  5. Quand la liste des dépôts s’affiche, sélectionnez le vôtre.

  6. Vous serez peut-être redirigé vers GitHub pour pouvoir installer l’application Azure Pipelines. Si c’est le cas, sélectionnez Approuver et installer.

Lorsque l’onglet Configurer s’affiche, sélectionnez Maven.

Personnaliser le pipeline

  1. Quand votre nouveau pipeline s’affiche, examinez le code YAML pour voir ce qu’il fait. Lorsque vous êtes prêt, sélectionnez Enregistrer et exécuter.

    Save and run button in a new YAML pipeline

  2. Vous êtes invité à valider un nouveau fichier azure-pipelines.yml dans votre référentiel. Une fois que vous êtes satisfait du message, sélectionnez Enregistrer et exécuter.

    Si vous souhaitez voir votre pipeline en action, sélectionnez le travail de build.

    Vous venez de créer et d’exécuter un pipeline créé automatiquement pour vous, car votre code semblait correspondre au modèle Maven.

    Votre référentiel comprend maintenant un pipeline YAML (azure-pipelines.yml) opérationnel et prêt à être personnalisé !

  3. Lorsque vous êtes prêt à apporter des modifications à votre pipeline, sélectionnez-le sur la page Pipelines, puis modifiez le fichier azure-pipelines.yml.

Ajouter les tâches Copier des fichiers et publier des artefacts de build

  1. Mettez à jour votre pipeline pour inclure la tâche CopyFiles@2. Cela crée un artefact que vous pouvez déployer dans votre groupe de machines virtuelles identiques.

      trigger: none
    
      pool:
        vmImage: 'ubuntu-latest'
    
      steps:
    - task: Maven@4
      inputs:
        mavenPomFile: 'pom.xml'
        mavenOptions: '-Xmx3072m'
        javaHomeOption: 'JDKVersion'
        jdkVersionOption: '1.8'
        jdkArchitectureOption: 'x64'
        publishJUnitResults: true
        testResultsFiles: '**/surefire-reports/TEST-*.xml'
        goals: 'package'
    
    - task: CopyFiles@2
      displayName: 'Copy File to: $(TargetFolder)'
      inputs:
        SourceFolder: '$(Build.SourcesDirectory)'
        Contents: |
          **/*.sh 
          **/*.war
          **/*jar-with-dependencies.jar
        TargetFolder: '$(System.DefaultWorkingDirectory)/pipeline-artifacts/'
        flattenFolders: true  
    

Créer une image personnalisée et la charger dans Azure

Vous avez besoin d’un groupe de ressources, d’un compte de stockage et d’une galerie d’images partagées pour votre image personnalisée.

  1. Créez un groupe de ressources avec la commande az group create. Cet exemple crée un groupe de ressources nommé myVMSSResourceGroupdans l’emplacement eastus2 :

    az group create --name myVMSSResourceGroup --location eastus2
    
  2. Créez un compte de stockage. Cet exemple crée un compte de stockage : vmssstorageaccount.

    az storage account create \
      --name vmssstorageaccount \
      --resource-group myVMSSResourceGroup \
      --location eastus2 \
      --sku Standard_LRS 
    
  3. Créer une galerie d’images partagées.

    az sig create --resource-group myVMSSResourceGroup --gallery-name myVMSSGallery
    
  4. Créez une nouvelle galerie d’images dans la ressource myVMSSGallery. Consultez Créer une Azure Shared Image Gallery à l’aide du portail pour en savoir plus sur l’utilisation des galeries d’images.

    az sig create --resource-group myVMSSResourceGroup --gallery-name myVMSSGallery
    
  5. Créez une définition d’image. Copiez la valeur id de la nouvelle image qui ressemble à /subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.Compute/galleries/myVMSSGallery/images/MyImage.

    az sig image-definition create -g myVMSSResourceGroup --gallery-name myVMSSGallery --gallery-image-definition MyImage --publisher GreatPublisher --offer GreatOffer --sku GreatSku --os-type linux
    

Créer une identité managée

  1. Créez une identité managée dans votre groupe de ressources.

    az identity create -g myVMSSResourceGroup -n myVMSSIdentity
    
  2. À partir de la sortie, copiez la valeur id. La valeur id ressemble à /subscriptions/<SUBSCRIPTION ID>/resourcegroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER ASSIGNED IDENTITY NAME>.

  3. Ouvrez votre galerie d’images dans la galerie et attribuez la valeur myVMSSIdentity au rôle Contributeur. Suivez ces étapes pour ajouter une attribution de rôle.

Créer l’image personnalisée

Pour créer une image personnalisée, vous pouvez utiliser la tâche DevOps Azure VM Image Builder.

  1. Ajoutez la tâche AzureImageBuilderTask@1 à votre fichier YAML. Remplacez les valeurs <SUBSCRIPTION ID>, <RESOURCE GROUP>, <USER ASSIGNED IDENTITY NAME> par vos propres valeurs. Veillez à vérifier que les valeurs galleryImageId, managedIdentity and storageAccountName sont exactes.

    - task: AzureImageBuilderTask@1
      displayName: 'Azure VM Image Builder Task'
      inputs:
        managedIdentity: '/subscriptions/<SUBSCRIPTION ID>/resourcegroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER ASSIGNED IDENTITY NAME>'
        imageSource: 'marketplace'
        packagePath: '$(System.DefaultWorkingDirectory)/pipeline-artifacts'
        inlineScript: |
          sudo mkdir /lib/buildArtifacts
          sudo cp  "/tmp/pipeline-artifacts.tar.gz" /lib/buildArtifacts/.
          cd /lib/buildArtifacts/.
          sudo tar -zxvf pipeline-artifacts.tar.gz
          sudo sh install.sh
        storageAccountName: 'vmssstorageaccount2'
        distributeType: 'sig'
        galleryImageId: '/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.Compute/galleries/myVMSSGallery/images/MyImage/versions/0.0.$(Build.BuildId)'
        replicationRegions: 'eastus2'
        ibSubscription: '<SUBSCRIPTION ID>'
        ibAzureResourceGroup: 'myVMSSResourceGroup'
        ibLocation: 'eastus2'
    
  2. Exécutez le pipeline pour générer votre première image. Vous devez peut-être autoriser les ressources pendant l’exécution du pipeline.

  3. Accédez à la nouvelle image dans le portail Azure et ouvrez Aperçu. Sélectionnez Créer un VMSS pour créer un nouveau groupe de machines virtuelles identiques à partir de la nouvelle image. Définissez Nom du groupe de machines virtuelles identiques sur vmssScaleSet. Consultez Créer un groupe de machines virtuelles identiques dans le portail Azure pour en savoir plus sur la création de groupes de machines virtuelles identiques dans le portail Azure.

Déployer des mises à jour dans le groupe de machines virtuelles identiques

Ajoutez une tâche Azure CLI à votre pipeline pour déployer des mises à jour dans le groupe identique. Ajoutez la tâche à la fin du pipeline. Remplacez <SUBSCRIPTION ID> par votre ID d’abonnement.

- task: AzureCLI@2
  inputs:
    azureSubscription: '`YOUR_SUBSCRIPTION_ID`' #Authorize and in the task editor
    ScriptType: 'pscore'
    scriptLocation: 'inlineScript'
    Inline: 'az vmss update --resource-group myVMSSResourceGroup --name vmssScaleSet --set virtualMachineProfile.storageProfile.imageReference.id=/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myVMSSResourceGroup/providers/Microsoft.Compute/galleries/myVMSSGallery/images/MyImage/versions/0.0.$(Build.BuildId)'

Nettoyer les ressources

Accédez au portail Azure et supprimez votre groupe de ressources, myVMSSResourceGroup.

Étapes suivantes