Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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:
- Ein Azure-Konto mit einem aktiven Abonnement. Kostenlos ein Konto erstellen.
- Eine aktive Azure DevOps-Organisation. Registrieren Sie sich für Azure Pipelines.
- Die Azure VM Image Builder DevOps-Aufgabe , die für Ihre DevOps-Organisation installiert ist.
- Ein verzweigtes GitHub-Repository mit dem Beispielprojekt. Verzweigen Sie das Repository "pipelines-vmss".
Einrichten der Java-Pipeline
Wählen Sie in Ihrem Azure DevOps-Projekt pipelines aus dem linken Navigationsmenü aus.
Wählen Sie "Neue Pipeline" oder " Pipeline erstellen " aus, wenn diese Pipeline der erste im Projekt ist.
Wählen Sie auf dem Codebildschirm "Wo befindet sich Ihr Code " auf GitHub aus.
Möglicherweise werden Sie zu GitHub weitergeleitet, um sich anzumelden. Geben Sie in diesem Fall Ihre Anmeldeinformationen für GitHub ein.
Wählen Sie auf dem Bildschirm " Repository auswählen " das Repository aus, in dem sich Ihre .NET-App befindet.
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
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.
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.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
Aktualisieren Sie Ihre Pipeline so, dass sie die
CopyFiles@2Aufgabe 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.
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 eastus2Erstellen eines neuen Speicherkontos. In diesem Beispiel wird ein Speicherkonto erstellt.
vmssstorageaccountaz storage account create \ --name vmssstorageaccount \ --resource-group myVMSSResourceGroup \ --location eastus2 \ --sku Standard_LRSErstellen Sie eine freigegebene Bildergalerie.
az sig create --resource-group myVMSSResourceGroup --gallery-name myVMSSGalleryErstellen Sie eine neue Bildergalerie in der
myVMSSGalleryRessource. 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 myVMSSGalleryErstellen Sie eine Bilddefinition. Kopieren Sie das
idneue 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
Erstellen Sie eine verwaltete Identität in Ihrer Ressourcengruppe.
az identity create -g myVMSSResourceGroup -n myVMSSIdentityKopieren Sie aus der Ausgabe die
id. DeridWille sieht wie/subscriptions/<SUBSCRIPTION ID>/resourcegroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER ASSIGNED IDENTITY NAME>folgt aus.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/myVMSSGallerySo 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.
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.sha256Committen Sie sowohl
install.shals auchinstall.sh.sha256in Ihr Repository.Fügen Sie die
AzureImageBuilderTask@1Aufgabe 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'Stellen Sie sicher, dass Ihr
install.shSkript 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 hereFühren Sie die Pipeline aus, um Ihr erstes Image zu generieren. Möglicherweise müssen Sie Ressourcen während der Pipelineausführung autorisieren .
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