Share via


Esercitazione: Distribuire un'app Java in un set di scalabilità di macchine virtuali

Servizi di Azure DevOps

Un set di scalabilità di macchine virtuali consente di distribuire e gestire macchine virtuali identiche e con scalabilità automatica.

Le VM vengono create in base alle esigenze in un set di scalabilità. È possibile definire regole per controllare come e quando le macchine virtuali vengono aggiunte o rimosse dal set di scalabilità. Queste regole possono essere attivate in base a determinate metriche, ad esempio il carico della CPU, l'utilizzo della memoria o il traffico di rete.

In questa esercitazione si compila un'app Java e la si distribuisce in un set di scalabilità di macchine virtuali. Scopri come:

  • Creare un set di scalabilità di macchine virtuali
  • Creare un'immagine del computer
  • Distribuire un'immagine personalizzata in un set di scalabilità di macchine virtuali

Prerequisiti

Prima di iniziare, è necessario disporre di quanto segue:

  • Un account Azure con una sottoscrizione attiva. Creare un account gratuitamente.
  • Un'organizzazione di Azure DevOps attiva. Iscriversi ad Azure Pipelines.
  • L'attività DevOps di Image Builder di macchine virtuali di Azure installata per l'organizzazione DevOps.
  • Repository GitHub con fork con il progetto di esempio. Creare una copia tramite fork del repository pipelines-vmss.

Configurare la pipeline Java

  1. Accedere all'organizzazione di Azure DevOps e passare al progetto.

  2. Passare a Pipeline e quindi selezionare Nuova pipeline o Crea pipeline se si crea la prima pipeline.

  3. Eseguire i passaggi della procedura guidata selezionando prima GitHub come percorso del codice sorgente.

  4. Si potrebbe essere reindirizzati a GitHub per l'accesso. In questo caso, immettere le credenziali di GitHub.

  5. Quando si vede l’elenco dei repository, selezionarne uno.

  6. È possibile che si venga reindirizzati a GitHub per installare l'app Azure Pipelines. In tal caso, selezionare Approva e installa.

Quando viene visualizzata la scheda Configura , selezionare Maven.

Personalizzare la pipeline

  1. Quando viene visualizzata la nuova pipeline, vedere YAML per vedere cosa fa. Quando si è pronti, selezionare Salva ed esegui.

    Save and run button in a new YAML pipeline

  2. Viene richiesto di eseguire il commit di un nuovo file azure-pipelines.yml nel repository. Dopo aver soddisfatto il messaggio, selezionare Salva ed esegui di nuovo.

    Se si vuole controllare la pipeline in azione, selezionare il processo di compilazione.

    È stata appena creata ed eseguita una pipeline creata automaticamente, perché il codice sembrava essere una corrispondenza valida per il modello Maven .

    È ora disponibile una pipeline YAML funzionante (azure-pipelines.yml) nel repository che è pronta per la personalizzazione.

  3. Quando si è pronti per apportare modifiche alla pipeline, selezionarla nella pagina Pipeline e quindi Modificare il azure-pipelines.yml file.

Aggiungere le attività Copia file e Pubblica artefatto di compilazione

  1. Aggiornare la pipeline per includere l'attività CopyFiles@2 . Verrà creato un artefatto che è possibile distribuire nel set di scalabilità di macchine virtuali.

      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  
    

Creare un'immagine personalizzata e caricarla in Azure

Per l'immagine personalizzata sono necessari un gruppo di risorse, un account di archiviazione e una raccolta di immagini condivise.

  1. Come prima cosa creare un gruppo di risorse con az group create. Questo esempio crea un gruppo di risorse denominato myVMSSResourceGroup nella località eastus2 :

    az group create --name myVMSSResourceGroup --location eastus2
    
  2. Creare un nuovo account di archiviazione. In questo esempio viene creato un account di archiviazione, vmssstorageaccount.

    az storage account create \
      --name vmssstorageaccount \
      --resource-group myVMSSResourceGroup \
      --location eastus2 \
      --sku Standard_LRS 
    
  3. Creare una raccolta di immagini condivise.

    az sig create --resource-group myVMSSResourceGroup --gallery-name myVMSSGallery
    
  4. Creare una nuova raccolta immagini nella myVMSSGallery risorsa. Per altre informazioni sull'uso delle raccolte di immagini, vedere Creare un Raccolta immagini condivise di Azure usando il portale.

    az sig create --resource-group myVMSSResourceGroup --gallery-name myVMSSGallery
    
  5. Creare una definizione di immagine. Copiare l'oggetto id della nuova immagine simile a /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
    

Creare un'identità gestita

  1. Creare un'identità gestita nel gruppo di risorse.

    az identity create -g myVMSSResourceGroup -n myVMSSIdentity
    
  2. Nell'output copiare .id L'oggetto id avrà un aspetto simile /subscriptions/<SUBSCRIPTION ID>/resourcegroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER ASSIGNED IDENTITY NAME>a .

  3. Aprire la raccolta immagini nella raccolta e assegnare myVMSSIdentity il ruolo Collaboratore. Seguire questa procedura per aggiungere un'assegnazione di ruolo.

Creare l'immagine personalizzata

Per creare un'immagine personalizzata, è possibile usare l'attività DevOps di Image Builder di macchine virtuali di Azure.

  1. Aggiungere l'attività AzureImageBuilderTask@1 al file YAML. Sostituire i valori per <SUBSCRIPTION ID>, <RESOURCE GROUP>, <USER ASSIGNED IDENTITY NAME> con i propri. Assicurarsi di verificare che i galleryImageIdvalori e managedIdentitystorageAccountName siano accurati.

    - 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. Eseguire la pipeline per generare la prima immagine. Potrebbe essere necessario autorizzare le risorse durante l'esecuzione della pipeline.

  3. Passare alla nuova immagine nel portale di Azure e aprire Panoramica. Selezionare Crea set di scalabilità di macchine virtuali per creare un nuovo set di scalabilità di macchine virtuali dalla nuova immagine. Impostare Il nome del set di scalabilità di macchine virtuali su vmssScaleSet. Per altre informazioni sulla creazione di set di scalabilità di macchine virtuali nel portale di Azure, vedere Creare un set di scalabilità di macchine virtuali nel portale di Azure.

Distribuire gli aggiornamenti nel set di scalabilità di macchine virtuali

Aggiungere un'attività dell'interfaccia della riga di comando di Azure alla pipeline per distribuire gli aggiornamenti al set di scalabilità. Aggiungere l'attività alla fine della pipeline. Sostituire <SUBSCRIPTION ID> con l'ID della sottoscrizione.

- 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)'

Pulire le risorse

Passare al portale di Azure ed eliminare il gruppo di risorse, myVMSSResourceGroup.

Passaggi successivi