Freigeben über


Tutorial: Bereitstellen einer Java-App in einer VM-Skalierungsgruppe

Azure DevOps Services

Mit einer VM-Skalierungsgruppe können Sie identische VMs mit automatischer Skalierung bereitstellen und verwalten.

Virtuelle Computer werden nach Bedarf in einer Skalierungsgruppe erstellt. Sie können Regeln definieren, um zu steuern, wie und wann der Skalierungsgruppe VMs hinzugefügt bzw. daraus entfernt werden. Diese Regeln können basierend auf Metriken wie CPU-Auslastung, Speicherauslastung oder Netzwerkdatenverkehr ausgelöst werden.

In diesem Tutorial erstellen Sie eine Java-App und stellen sie in einer VM-Skalierungsgruppe bereit. Folgendes wird vermittelt:

  • Erstellen einer Skalierungsgruppe für virtuelle Computer
  • Erstellen eines Computerimages
  • Bereitstellen eines benutzerdefinierten Images in einer VM-Skalierungsgruppe

Voraussetzungen

Bevor Sie beginnen, benötigen Sie Folgendes:

Einrichten der Java-Pipeline

  1. Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und wechseln Sie zu Ihrem Projekt.

  2. Gehen Sie zu Pipelines und wählen Sie dann Neue Pipeline aus oder Pipeline erstellen, wenn Sie Ihre erste Pipeline erstellen.

  3. Führen Sie die Schritte des Assistenten aus. Dabei wählen Sie zuerst GitHub als Speicherort Ihres Quellcodes aus.

  4. Möglicherweise werden Sie zu GitHub weitergeleitet, um sich anzumelden. Geben Sie in diesem Fall Ihre Anmeldeinformationen für GitHub ein.

  5. Wenn die Liste der Repositorys angezeigt wird, wählen Sie Ihr Repository aus.

  6. Sie werden möglicherweise zu GitHub weitergeleitet, um die Azure Pipelines-App zu installieren. Wählen Sie in diesem Fall „Approve & Install“ (Genehmigen und installieren) aus.

Wenn die Registerkarte Konfigurieren angezeigt wird, wählen Sie Maven aus.

Anpassen der Pipeline

  1. Wenn Ihre neue Pipeline angezeigt wird, sehen Sie sich den YAML-Code an, um herauszufinden, was er macht. Wenn Sie so weit sind, wählen Sie Speichern und ausführen aus.

    Save and run button in a new YAML pipeline

  2. Sie werden aufgefordert, eine neue azure-pipelines.yml-Datei in Ihr Repository zu committen. Sobald Sie mit der Nachricht zufrieden sind, klicken Sie erneut auf Speichern und ausführen.

    Wenn Sie Ihre Pipeline in Aktion sehen möchten, wählen Sie den Buildauftrag aus.

    Sie haben soeben eine Pipeline erstellt und ausgeführt, die automatisch für Sie erstellt wurde, da Ihr Code gut zur Maven-Vorlage zu passen schien.

    Sie verfügen nun über eine funktionierende YAML-Pipeline (azure-pipelines.yml) in Ihrem Repository, die Sie anpassen können.

  3. Wenn Sie bereit sind, Änderungen an Ihrer Pipeline vorzunehmen, wählen Sie sie auf der Seite Pipelines aus, und bearbeiten Sie dann die azure-pipelines.yml-Datei.

Hinzufügen der Aufgaben zum Kopieren von Dateien und Veröffentlichen von Buildartefakten

  1. Aktualisieren Sie Ihre Pipeline so, dass sie die Aufgabe CopyFiles@2 enthält. Dadurch wird ein Artefakt erstellt, das Sie in Ihrer VM-Skalierungsgruppe bereitstellen können.

      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  
    

Erstellen eines benutzerdefinierten Images und Hochladen in Azure

Sie benötigen eine Ressourcengruppe, ein Speicherkonto und einen freigegebenen Imagekatalog für Ihr benutzerdefiniertes Image.

  1. Erstellen Sie mit az group create eine Ressourcengruppe. In diesem Beispiel wird eine Ressourcengruppe namens myVMSSResourceGroup und dem Speicherort eastus2 erstellt:

    az group create --name myVMSSResourceGroup --location eastus2
    
  2. Erstellen Sie ein neues Speicherkonto. In diesem Beispiel wird das Speicherkonto vmssstorageaccount erstellt.

    az storage account create \
      --name vmssstorageaccount \
      --resource-group myVMSSResourceGroup \
      --location eastus2 \
      --sku Standard_LRS 
    
  3. Erstellen Sie einen Katalog mit freigegebenen Images.

    az sig create --resource-group myVMSSResourceGroup --gallery-name myVMSSGallery
    
  4. Erstellen Sie einen neuen Imagekatalog in der myVMSSGallery-Ressource. Weitere Informationen zum Arbeiten mit Imagekatalogen finden Sie unter Erstellen einer Azure Shared Image Gallery-Instanz mithilfe des Portals.

    az sig create --resource-group myVMSSResourceGroup --gallery-name myVMSSGallery
    
  5. Erstellen Sie eine Imagedefinition. Kopieren Sie die id des neuen Images, die wie folgt lautet: /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
    

Erstellen einer verwalteten Identität

  1. Erstellen Sie eine verwaltete Identität in Ihrer Ressourcengruppe.

    az identity create -g myVMSSResourceGroup -n myVMSSIdentity
    
  2. Kopieren Sie aus der Ausgabe die id. Die id weist folgendes Format auf: /subscriptions/<SUBSCRIPTION ID>/resourcegroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER ASSIGNED IDENTITY NAME>.

  3. Öffnen Sie Ihren Imagekatalog im Katalog, und weisen Sie myVMSSIdentity die Rolle „Mitwirkender“ zu. Führen Sie die folgenden Schritte aus, um eine Rollenzuweisung hinzuzufügen.

Erstellen des benutzerdefinierten Images

Zum Erstellen eines benutzerdefinierten Images können Sie Azure VM Image Builder DevOps Task verwenden.

  1. Fügen Sie Ihrer YAML-Datei die Aufgabe AzureImageBuilderTask@1 hinzu. Ersetzen Sie die Werte für <SUBSCRIPTION ID>, <RESOURCE GROUP> und <USER ASSIGNED IDENTITY NAME> durch Ihre eigenen Werte. Stellen Sie sicher, dass die Werte galleryImageId, managedIdentity und storageAccountName korrekt sind.

    - 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. Führen Sie die Pipeline aus, um Ihr erstes Image zu generieren. Möglicherweise müssen Sie während der Pipelineausführung Ressourcen autorisieren.

  3. Wechseln Sie im Azure-Portal zum neuen Image, und öffnen Sie Übersicht. Wählen Sie VMSS erstellen aus, um über das neue Image eine neue VM-Skalierungsgruppe zu erstellen. Legen Sie Name der VM-Skalierungsgruppe auf vmssScaleSet fest. Weitere Informationen zum Erstellen von VM-Skalierungsgruppen im Azure-Portal finden Sie unter Schnellstart: Erstellen einer VM-Skalierungsgruppe über das Azure-Portal.

Bereitstellen von Updates für die VM-Skalierungsgruppe

Fügen Sie Ihrer Pipeline eine Azure CLI-Aufgabe hinzu, um Updates für die Skalierungsgruppe bereitzustellen. Fügen Sie die Aufgabe am Ende der Pipeline hinzu. Ersetzen Sie <SUBSCRIPTION ID> durch Ihre Abonnement-ID.

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

Bereinigen von Ressourcen

Navigieren Sie zum Azure-Portal, und löschen Sie die Ressourcengruppe myVMSSResourceGroup.

Nächste Schritte