Erstellen und Veröffentlichen von Docker-Images in Azure Container Registry
Azure DevOps Services | Azure DevOps Server 2022
Mithilfe von Azure Pipelines können Sie einen Pipelineworkflow einrichten, um Ihre Docker-Images zu erstellen und in Azure Container Registry zu veröffentlichen. In diesem Artikel wird Folgendes behandelt:
- Erstellen einer Azure-Containerregistrierung
- Einrichten eines selbstgehosteten Agents auf einer Azure-VM
- Einrichten der verwalteten Dienstidentität
- Erstellen einer Dienstverbindung für die Docker-Registrierung
- Erstellen und Veröffentlichen Ihres Images in Azure Container Registry
Voraussetzungen
Ein GitHub-Konto. Falls Sie noch nicht über ein Konto verfügen, können Sie sich kostenlos registrieren.
Die Administratorrolle für Dienstverbindungen in Ihrem Azure DevOps-Projekt.
Ein Azure-Konto mit einem aktiven Abonnement. Falls Sie noch nicht über ein Konto verfügen, können Sie sich kostenlos registrieren.
Abrufen des Codes
Forken oder klonen Sie die Beispiel-App, um dieses Tutorial zu verwenden.
https://github.com/MicrosoftDocs/pipelines-javascript-docker
Erstellen einer Azure-Containerregistrierung
Navigieren Sie zum Azure-Portal.
Wählen Sie im linken Navigationsbereich Ressource erstellen, dann Container und dann Containerregistrierung aus.
Wählen Sie Ihr Abonnement und dann Ihre Ressourcengruppe aus, oder erstellen Sie ein neues Abonnement.
Geben Sie einen Registrierungsnamen für Ihre Containerregistrierung ein. Der Registrierungsname muss innerhalb von Azure eindeutig sein und mindestens 5 Zeichen enthalten.
Wählen Sie Ihren bevorzugten Standort und die SKU aus, und wählen Sie dann Überprüfen + erstellen aus.
Überprüfen Sie Ihre Einstellungen, und wählen Sie dann Erstellen aus, wenn Sie fertig sind.
Einrichten einer selbstgehosteten Agent-VM
Um eine verwaltete Dienstidentität mit Azure Pipelines zum Veröffentlichen von Docker-Images in Azure Container Registry zu verwenden, müssen Sie Ihren eigenen selbstgehosteten Agent auf einer Azure-VM einrichten.
Erstellen einer VM
Navigieren Sie zum Azure-Portal.
Wählen Sie im linken Navigationsbereich Ressource erstellen und dann Virtueller Computer –>Erstellen aus.
Wählen Sie Ihr Abonnement und dann die Ressourcengruppe aus, mit der Sie Ihre Containerregistrierung erstellt haben.
Geben Sie Ihrem virtuellen Computer einen Namen, und wählen Sie ein Image aus.
Geben Sie Ihren Benutzernamen und Ihr Kennwort ein, und wählen Sie dann Überprüfen + erstellen aus.
Überprüfen Sie Ihre Einstellungen, und wählen Sie dann Erstellen aus, wenn Sie fertig sind.
Klicken Sie auf Zu Ressource wechseln, wenn die Bereitstellung abgeschlossen ist.
Erstellen eines Agent-Pools
Wählen Sie in Ihrem Azure DevOps-Projekt das Zahnradsymbol aus, um zu Ihren Projekteinstellungen zu navigieren.
Wählen Sie Agent-Pools und dann Pool hinzufügen aus.
Wählen Sie Neu und dann im Dropdownmenü Pooltyp die Option Selbstgehostet aus.
Geben Sie Ihrem Pool einen Namen, und aktivieren Sie dann das Kontrollkästchen Allen Pipelines die Zugriffsberechtigung gewähren.
Wählen Sie Erstellen, wenn Sie fertig sind.
Wählen Sie nun den Pool aus, den Sie gerade erstellt haben, und wählen Sie dann Neuer Agent aus.
Sie verwenden die Anweisungen in diesem Fenster, um Ihren Agent auf dem virtuellen Computer einzurichten, den Sie zuvor erstellt haben. Wählen Sie die Schaltfläche Kopieren aus, um den Downloadlink in die Zwischenablage zu kopieren.
Erstellen eines persönlichen Zugriffstokens
Wählen Sie in Ihrem Azure DevOps-Projekt die Option Benutzereinstellungen und dann Persönliche Zugriffstoken aus.
Wählen Sie Neues Token aus, um ein neues persönliches Zugriffstoken zu erstellen.
Geben Sie einen Namen für Ihr PAT ein, und wählen Sie dann ein Ablaufdatum aus.
Wählen Sie unter Bereiche die Option Benutzerdefiniert und dann Alle Bereiche anzeigen aus.
Wählen Sie Agent-Pools –>Lesen und verwalten und Bereitstellungsgruppen –>Lesen und verwalten aus.
Wählen Sie Erstellen aus, wenn Sie fertig sind, und speichern Sie Ihr PAT an einem sicheren Ort.
Einrichten eines selbstgehosteten Agent
Stellen Sie in Azure-Portal eine Verbindung mit Ihrem virtuellen Computer her.
Führen Sie für eine PowerShell-Eingabeaufforderung mit erhöhten Rechten den folgenden Befehl aus, um den Agent herunterzuladen.
Invoke-WebRequest -URI <YOUR_AGENT_DOWNLOAD_LINK> -UseBasicParsing -OutFile <FILE_PATH> ##Example: Invoke-WebRequest -URI https://vstsagentpackage.azureedge.net/agent/2.213.2/vsts-agent-win-x64-2.213.2.zip -OutFile C:\vsts-agent-win-x64-2.213.2.zip
Führen Sie den folgenden Befehl aus, um Ihren Agent zu extrahieren und zu erstellen.
mkdir agent ; cd agent Add-Type -AssemblyName System.IO.Compression.FileSystem ; [System.IO.Compression.ZipFile]::ExtractToDirectory("<FILE_PATH>", "$PWD")
Führen Sie den folgenden Befehl aus, um mit dem Konfigurieren Ihres Agents zu beginnen.
.\config.cmd
Geben Sie Ihre Server-URL ein, wenn Sie zur Eingabe aufgefordert werden. Beispiel: https://dev.azure.com/fabrikamFiber
Drücken Sie die EINGABETASTE, wenn Sie zur Eingabe des Authentifizierungstyps aufgefordert werden, um die PAT-Authentifizierung auszuwählen.
Fügen Sie Ihr persönliches Zugriffstoken ein, das Sie zuvor erstellt haben, und drücken Sie dann die EINGABETASTE.
Geben Sie den Namen Ihres Agent-Pools und dann Ihren Agent-Namen ein.
Behalten Sie den Standardwert für den Arbeitsordner bei, und geben Sie dann Y ein, wenn Sie Ihren Agent als Dienst ausführen möchten.
Nachdem der Agent bereit ist, auf Aufträge zu lauschen, installieren Sie Docker auf Ihrer VM. Führen Sie den folgenden Befehl aus, um Docker herunterzuladen.
Invoke-WebRequest -URI https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe -OutFile <DOWNLOAD_PATH>
Navigieren Sie zu Ihrem Downloadpfad, und führen Sie dann den folgenden Befehl aus, um Docker zu installieren und zu starten.
Start-Process 'Docker%20Desktop%20Installer.exe' -Wait install
Navigieren Sie nun zurück zu Ihrem Agent-Ordner, und führen Sie die cmd-Datei aus, um den Agent auf Ihrer Azure-VM auszuführen.
.\run.cmd
Ihr Agent sollte jetzt in Ihrem Agent-Pool –>Agents im Azure DevOps-Portal aufgeführt sein.
Einrichten der verwalteten Identität
Navigieren Sie im Azure-Portal zu der VM, die Sie zuvor erstellt haben.
Wählen Sie im linken Navigationsbereich Identität aus, und aktivieren Sie dann die systemseitig zugewiesene Identität.
Wählen Sie Speichern aus, wenn Sie fertig sind, und bestätigen Sie dann Ihre Auswahl.
Wählen Sie Azure-Rollenzuweisungen und dann Rollenzuweisung hinzufügen aus.
Wählen Sie im Dropdownmenü Bereich die Option Ressourcengruppe aus.
Wählen Sie Ihr Abonnement und Ihre Ressourcengruppe und dann die Rolle AcrPush aus.
Wiederholen Sie die Schritte 5 und 6, um die Rolle AcrPull hinzuzufügen.
Erstellen einer Dienstverbindung für die Docker-Registrierung
Wählen Sie in Ihrem Azure DevOps-Projekt das Zahnradsymbol aus, um zu Ihren Projekteinstellungen zu navigieren.
Wählen Sie im linken Bereich Dienstverbindungen aus.
Wählen Sie Neue Dienstverbindung und dann Docker-Registrierung aus, und klicken Sie dann auf Weiter.
Wählen Sie Azure Container Registry und dann verwaltete Dienstidentität als Authentifizierungstyp aus.
Geben Sie Abonnement-ID, Abonnementname und den Anmeldeserver für die Azure-Containerregistrierung ein. Fügen Sie die systemseitig zugewiesene Mandanten-ID Ihrer VM, die Sie im vorherigen Schritt erstellt haben, in das Textfeld Mandanten-ID ein.
Geben Sie einen Namen für Ihre Dienstverbindung ein, und aktivieren Sie dann das Kontrollkästchen Allen Pipelines die Zugriffsberechtigung gewähren. Um diese Option auszuwählen, benötigen Sie die Dienstverbindungsadministratorrolle.
Wählen Sie Speichern aus, wenn Sie fertig sind.
Erstellen und Veröffentlichen in Azure Container Registry
Wählen Sie in Ihrem Azure DevOps-Projekts die Option Pipelines und anschließend Pipeline erstellen aus.
Wählen Sie den Dienst aus, der Ihren Quellcode hostet (Azure Repos, GitHub usw.).
Wählen Sie Ihr Repository und dann Starterpipeline aus.
Löschen Sie die yaml-Standardpipeline, und verwenden Sie den folgenden Codeausschnitt:
trigger: - main variables: dockerRegistryServiceConnection: '<SERVICE_CONNECTION_NAME>' imageRepository: '<IMAGE_NAME>' dockerfilePath: '$(Build.SourcesDirectory)/app/Dockerfile' tag: '$(Build.BuildId)' stages: - stage: Build displayName: Build and publish stage jobs: - job: Build displayName: Build job pool: name: '<YOUR_AGENT_POOL_NAME>' steps: - task: DockerInstaller@0 inputs: dockerVersion: '17.09.0-ce' - task: Docker@2 displayName: Build and publish image to Azure Container Registry inputs: command: buildAndPush containerRegistry: $(dockerRegistryServiceConnection) repository: $(imageRepository) dockerfile: $(dockerfilePath) tags: | $(tag)
Sobald die Pipelineausführung abgeschlossen ist, können Sie Ihr Image in Azure überprüfen. Navigieren Sie zu Ihrer Azure Container Registry-Instanz im Azure-Portal, und wählen Sie dann Repositorys aus.
Bereinigen von Ressourcen
Wenn Sie diese Anwendung nicht weiter verwenden möchten, löschen Sie die Ressourcengruppe, um weitere Gebühren zu vermeiden.
az group delete --name myapp-rg