Freigeben über


Lernprogramm: Bereitstellen einer Java-App in einem Skalierungssatz für virtuelle Computer

Azure DevOps Services

Mit einem Skalierungssatz für virtuelle Computer können Sie identische virtuelle Computer bereitstellen und verwalten.

VMs werden nach Bedarf in einem Skalierungssatz erstellt. Sie definieren Regeln, um zu steuern, wie und wann virtuelle Computer aus dem Skalierungssatz hinzugefügt oder entfernt werden. Diese Regeln können basierend auf Metriken wie CPU-Auslastung, Arbeitsspeicherauslastung oder Netzwerkdatenverkehr ausgelöst werden.

In diesem Lernprogramm erstellen Sie eine Java-App und stellen sie in einem Skalierungssatz für virtuelle Computer bereit. Hier erfahren Sie, wie Sie:

  • Erstellen einer Skalierungsgruppe für virtuelle Computer
  • Erstellen eines Computerimages
  • Bereitstellen eines benutzerdefinierten Images in einem Skalierungssatz für virtuelle Computer

Voraussetzungen

Bevor Sie beginnen, benötigen Sie Folgendes:

Einrichten der Java-Pipeline

  1. Wählen Sie in Ihrem Azure DevOps-Projekt pipelines aus dem linken Navigationsmenü aus.

  2. Wählen Sie "Neue Pipeline" oder " Pipeline erstellen " aus, wenn diese Pipeline der erste im Projekt ist.

  3. Wählen Sie auf dem Codebildschirm "Wo befindet sich Ihr Code " auf GitHub aus.

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

  5. Wählen Sie auf dem Bildschirm " Repository auswählen " das Repository aus, in dem sich Ihre .NET-App befindet.

  6. Sie werden möglicherweise zu GitHub weitergeleitet, um die Azure Pipelines-App zu installieren. Wenn ja, wählen Sie "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 fertig sind, wählen Sie "Speichern" und "Ausführen" aus.

    Schaltfläche

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

    Wenn Sie Ihre Pipeline in Betrieb sehen möchten, wählen Sie den Build-Auftrag 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 CopyFiles@2 Aufgabe enthält. Dadurch wird ein Artefakt erstellt, das Sie im Skalierungssatz des virtuellen Computers 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 Bilds und Hochladen in Azure

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

  1. Erstellen Sie mit az group create eine Ressourcengruppe. In diesem Beispiel wird eine Ressourcengruppe namens myVMSSResourceGroup am Eastus2-Speicherort erstellt:

    az group create --name myVMSSResourceGroup --location eastus2
    
  2. Erstellen eines neuen Speicherkontos. In diesem Beispiel wird ein Speicherkonto erstellt. vmssstorageaccount

    az storage account create \
      --name vmssstorageaccount \
      --resource-group myVMSSResourceGroup \
      --location eastus2 \
      --sku Standard_LRS 
    
  3. Erstellen Sie eine freigegebene Bildergalerie.

    az sig create --resource-group myVMSSResourceGroup --gallery-name myVMSSGallery
    
  4. Erstellen Sie eine neue Bildergalerie in der myVMSSGallery Ressource. Weitere Informationen zum Arbeiten mit Bildkatalogen finden Sie unter Erstellen einer freigegebenen Azure-Bildergalerie mithilfe des Portals .

    az sig create --resource-group myVMSSResourceGroup --gallery-name myVMSSGallery
    
  5. Erstellen Sie eine Bilddefinition. Kopieren Sie das id neue Bild, das wie /subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.Compute/galleries/myVMSSGallery/images/MyImagefolgt aussieht.

    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. Der id Wille sieht wie /subscriptions/<SUBSCRIPTION ID>/resourcegroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER ASSIGNED IDENTITY NAME>folgt aus.

  3. Weisen Sie der verwalteten Identität die mindestens erforderlichen Berechtigungen für die Imageerstellung und -bereitstellung zu. Anstatt die allgemeine Rolle " Mitwirkender " zu verwenden, weisen Sie diese spezifischen Rollen zu:

    • Azure Image Builder Service Image Creation Role – Erforderlich für image Builder zum Erstellen und Verteilen von Bildern
    • Mitwirkender des Speicherkontos – Beschränkt auf das spezifische Speicherkonto, das für Build-Artefakte verwendet wird
    • Mitwirkender der freigegebenen Bildergalerie – Auf den spezifischen Katalog beschränkt

    So weisen Sie diese Rollen mithilfe der Azure CLI zu:

    # 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/myVMSSGallery
    

    So rufen Sie die Objekt-ID Ihrer verwalteten Identität ab:

    az identity show -g myVMSSResourceGroup -n myVMSSIdentity --query principalId -o tsv
    

Erstellen des benutzerdefinierten Bilds

Zum Erstellen eines benutzerdefinierten Images können Sie die DevOps-Aufgabe des Azure-VM-Image-Generators verwenden.

Warnung

Supply Chain Security: Das Inlineskript wird mit erhöhten Rechten (sudo) ausgeführt. Befolgen Sie diese bewährten Methoden:

  • Überprüfen Sie die Artefaktintegrität vor der Ausführung. Verwenden Sie Prüfsummen oder digitale Signaturen, um sicherzustellen, dass Build-Artefakte nicht verändert wurden.
  • Überprüfen Sie das Installationsskript , bevor Sie ein Commit für das Repository ausführen. Stellen Sie sicher, dass nur erforderliche Vorgänge ausgeführt werden.
  • Minimieren Sie die sudo-Verwendung auf Vorgänge, die erhöhte Berechtigungen erfordern.
  • Vermeiden Sie das Herunterladen und Ausführen von Skripts aus externen Quellen ohne Integritätsüberprüfung.
  1. Erstellen Sie vor dem Hinzufügen der Image Builder-Aufgabe eine prüfsummenbasierte Version Ihres Installationsskripts. Fügen Sie dies zu Ihrem Repository hinzu:

    # Generate SHA256 checksum for your install.sh script
    sha256sum install.sh > install.sh.sha256
    

    Committen Sie sowohl install.sh als auch install.sh.sha256 in Ihr Repository.

  2. Fügen Sie die AzureImageBuilderTask@1 Aufgabe zu Ihrer YAML-Datei mit Integritätsüberprüfung hinzu. Ersetzen Sie die Werte für <SUBSCRIPTION ID>, <RESOURCE GROUP> und <USER ASSIGNED IDENTITY NAME> durch Ihre eigenen:

    - 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'
    
  3. Stellen Sie sicher, dass Ihr install.sh Skript die folgenden Sicherheitspraktiken befolgt:

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

  5. Wechseln Sie zum neuen Image im Azure-Portal, und öffnen Sie "Übersicht". Wählen Sie "VMSS erstellen" aus, um einen neuen Skalierungssatz für virtuelle Computer aus dem neuen Image zu erstellen. Legen Sie den Skalierungsnamen des virtuellen Computers auf vmssScaleSet. Weitere Informationen zum Erstellen von Skalierungssätzen für virtuelle Computer im Azure-Portal finden Sie unter Erstellen eines Skalierungssatzes für virtuelle Computer im Azure-Portal.

Bereitstellen von Updates für den Skalierungssatz des virtuellen Computers

Fügen Sie Ihrer Pipeline eine Azure CLI-Aufgabe hinzu, um Updates für den Skalierungssatz bereitzustellen. Fügen Sie den Vorgang 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

Wechseln Sie zum Azure-Portal, und löschen Sie Ihre Ressourcengruppe. myVMSSResourceGroup

Nächste Schritte