Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Azure DevOps Services
Un groupe de machines virtuelles identiques vous permet de déployer et de gérer des machines virtuelles identiques et de mise à l’échelle automatique.
Les machines virtuelles sont créées si nécessaire dans un groupe identique. Vous définissez des règles pour contrôler comment et quand des machines virtuelles sont ajoutées ou supprimées du groupe identique. Ces règles peuvent être déclenchées en fonction de métriques telles que la charge processeur, l’utilisation de la mémoire ou le trafic réseau.
Dans ce tutoriel, vous créez une application Java et la déployez sur un groupe de machines virtuelles identiques. Vous apprenez à :
- Créer un ensemble échelonnable de machines virtuelles
- Générer une image d’ordinateur
- Déployer une image personnalisée sur un groupe de machines virtuelles identiques
Conditions préalables
Avant de commencer, vous avez besoin des éléments suivants :
- Un compte Azure avec un abonnement actif. Créez un compte gratuitement.
- Organisation Azure DevOps active. Inscrivez-vous à Azure Pipelines.
- Tâche DevOps du Générateur d’images de machine virtuelle Azure installée pour votre organisation DevOps.
- Dépôt GitHub forked avec l’exemple de projet. Fork the pipelines-vmss repository.
Configurer votre pipeline Java
Dans votre projet Azure DevOps, sélectionnez Pipelines dans le menu de navigation de gauche.
Sélectionnez Nouveau pipeline ou Créer un pipeline si ce pipeline est le premier dans le projet.
Dans l’écran Où se trouve votre code , sélectionnez GitHub.
Vous serez peut-être redirigé vers GitHub pour vous connecter. Si c’est le cas, entrez vos informations d’identification GitHub.
Dans l’écran Sélectionner un référentiel , sélectionnez le référentiel dans lequel se trouve votre application .NET.
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
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.
Vous êtes invité à valider un nouveau fichier azure-pipelines.yml dans votre référentiel. Dès que le message vous convient, sélectionnez à nouveau 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é !Dès que vous souhaitez commencer à apporter des modifications à votre pipeline, sélectionnez-le sur la page Pipelines, puis sélectionnez Modifier pour modifier le fichier
azure-pipelines.yml.
Ajouter les tâches Copier des fichiers et publier des artefacts de build
Mettez à jour votre pipeline pour inclure la
CopyFiles@2tâche. Cela crée un artefact que vous pouvez déployer sur 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 aurez besoin d’un groupe de ressources, d’un compte de stockage et d’une galerie d’images partagées pour votre image personnalisée.
Créez un groupe de ressources avec la commande az group create. Cet exemple crée un groupe de ressources nommé myVMSSResourceGroup à l’emplacement eastus2 :
az group create --name myVMSSResourceGroup --location eastus2Créez un compte de stockage. Cet exemple crée un compte de stockage.
vmssstorageaccountaz storage account create \ --name vmssstorageaccount \ --resource-group myVMSSResourceGroup \ --location eastus2 \ --sku Standard_LRSCréez une galerie d’images partagées.
az sig create --resource-group myVMSSResourceGroup --gallery-name myVMSSGalleryCréez une galerie d’images dans la
myVMSSGalleryressource. Consultez Créer une galerie d’images partagées Azure à l’aide du portail pour en savoir plus sur l’utilisation des galeries d’images.az sig create --resource-group myVMSSResourceGroup --gallery-name myVMSSGalleryCréez une définition d’image. Copiez la
idnouvelle 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
Créez une identité managée dans votre groupe de ressources.
az identity create -g myVMSSResourceGroup -n myVMSSIdentityÀ partir de la sortie, copiez le
id. Leidsera semblable/subscriptions/<SUBSCRIPTION ID>/resourcegroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER ASSIGNED IDENTITY NAME>à .Attribuez à l’identité managée les autorisations minimales requises pour la création et le déploiement d’images. Au lieu d’utiliser le rôle Contributeur large, attribuez ces rôles spécifiques :
- Rôle de création d’images du service Azure Image Builder - Obligatoire pour le Générateur d’images pour créer et distribuer des images
- Contributeur de compte de stockage - Limité au compte de stockage spécifique utilisé pour les artefacts de build
- Contributeur de la galerie d’images partagées - Limité à la galerie spécifique
Pour attribuer ces rôles à l’aide d’Azure CLI :
# Assign Image Builder Service Image Creation Role (built-in role) az role assignment create --assignee-object-id <MANAGED_IDENTITY_OBJECT_ID> \ --role "Azure Image Builder Service Image Creation Role" \ --scope /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/myVMSSResourceGroup # Assign Storage Account Contributor to the specific storage account az role assignment create --assignee-object-id <MANAGED_IDENTITY_OBJECT_ID> \ --role "Storage Account Contributor" \ --scope /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/myVMSSResourceGroup/providers/Microsoft.Storage/storageAccounts/vmssstorageaccount # Assign Shared Image Gallery Contributor to the specific gallery az role assignment create --assignee-object-id <MANAGED_IDENTITY_OBJECT_ID> \ --role "Shared Image Gallery Contributor" \ --scope /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/myVMSSResourceGroup/providers/Microsoft.Compute/galleries/myVMSSGalleryPour obtenir l’ID d’objet de votre identité managée :
az identity show -g myVMSSResourceGroup -n myVMSSIdentity --query principalId -o tsv
Créer l’image personnalisée
Pour créer une image personnalisée, vous pouvez utiliser la tâche DevOps du Générateur d’images de machine virtuelle Azure.
Avertissement
Sécurité de la chaîne d’approvisionnement : le script inline s’exécute avec des privilèges élevés (sudo). Suivez ces meilleures pratiques :
- Vérifiez l’intégrité des artefacts avant l’exécution. Utilisez des sommes de contrôle ou des signatures numériques pour confirmer que les artéfacts de construction n’ont pas été falsifiés.
- Passez en revue le script d’installation avant de valider le dépôt. Assurez-vous qu’elle effectue uniquement les opérations nécessaires.
- Réduisez l’utilisation de sudo aux opérations qui nécessitent des privilèges élevés.
- Évitez de télécharger et d’exécuter des scripts à partir de sources externes sans vérification d’intégrité.
Avant d’ajouter la tâche du générateur d’images, créez une version de contrôle de votre script d’installation. Ajoutez-le à votre référentiel :
# Generate SHA256 checksum for your install.sh script sha256sum install.sh > install.sh.sha256Validez à la fois
install.shetinstall.sh.sha256dans votre référentiel.Ajoutez
AzureImageBuilderTask@1tâche à votre fichier YAML avec vérification d'intégrité. Remplacez les valeurs de<SUBSCRIPTION ID>,<RESOURCE GROUP>,<USER ASSIGNED IDENTITY NAME>par vos propres valeurs.- 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: | set -e # Exit on error # Verify artifact integrity echo "Verifying artifact integrity..." cd /tmp tar -zxvf pipeline-artifacts.tar.gz # Verify install.sh checksum if [ -f install.sh.sha256 ]; then sha256sum -c install.sh.sha256 if [ $? -ne 0 ]; then echo "ERROR: install.sh checksum verification failed. Aborting." exit 1 fi else echo "WARNING: Checksum file not found. Skipping integrity verification." fi # Create build artifacts directory and copy verified artifacts sudo mkdir -p /lib/buildArtifacts sudo cp install.sh /lib/buildArtifacts/. # Execute with minimal sudo - only the install script, not general commands sudo /lib/buildArtifacts/install.sh storageAccountName: 'vmssstorageaccount' 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'Vérifiez que votre
install.shscript suit ces pratiques de sécurité :#!/bin/bash set -e # Exit on any error set -o pipefail # Exit if any command in pipeline fails # Only run operations necessary for application setup # Avoid unnecessary sudo where possible echo "Installing application dependencies..." # Add your installation commands hereExécutez le pipeline pour générer votre première image. Vous devrez peut-être autoriser les ressources pendant l’exécution du pipeline.
Accédez à la nouvelle image dans le portail Azure et ouvrez Vue d’ensemble. Sélectionnez Créer VMSS pour créer un groupe de machines virtuelles identiques à partir de la nouvelle image. Définissez le 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 sur le groupe de machines virtuelles identiques
Ajoutez une tâche Azure CLI à votre pipeline pour déployer des mises à jour sur 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