Übung: Bereitstellen eines Docker-Containers in Azure
In Ihrem Projekt war eine Releasepipeline enthalten, die die Projekte in der Projektmappe erstellt und die Web-App für ihren App Service bereitstellt. Jetzt ist es an der Zeit, diesen Pipelinebuild zu aktualisieren und das Projekt stattdessen als Container bereitzustellen.
In dieser Lerneinheit lernen Sie Folgendes:
- Definieren Sie einige Pipelinevariablen, um die Verwaltung der Buildpipeline zu vereinfachen.
- Ersetzen Sie die vorhandenen Buildtasks durch einen einheitlichen Task zum Erstellen und Pushen eines Docker-Containers.
- Ersetzen Sie den vorhandenen Bereitstellungstask durch einen Task, der die App Service Web-App mit dem neuen Containerimage aktualisiert.
- Speichern Sie die Pipeline, um einen Build- und Releasevorgang auszulösen.
Definieren von Variablen, die innerhalb der Pipeline freigegeben werden sollen
Hier fügen Sie der vorhandenen YAML-Pipeline, die in azure-pipelines.yml definiert ist, eine neue Pipelinevariable hinzu.
Navigieren Sie aus Azure DevOps zu Pipelines.
Wählen Sie die Pipeline aus.
Wählen Sie Bearbeiten aus. Stellen Sie sicher, dass der Branch auf Standard festgelegt ist, indem Sie diesen aus dem Dropdownmenü auswählen. Dadurch wird Ihre Datei azure-pipelines.yml angezeigt.
Fügen Sie die hervorgehobene Zeile unten hinzu, um Pipelinevariablen mit den Namen
webRepository
undtag
hinzuzufügen. Diese werden in mehreren Tasks verwendet, um die spezifische Version des Containers eindeutig zu identifizieren, auf den verwiesen wird. Sie können diebuildConfiguration
-Variable auch entfernen. Sie benötigen diese nicht mehr.trigger: - '*' variables: buildConfiguration: 'Release' webRepository: 'web' tag: '$(Build.BuildId)'
Ersetzen der Buildstagingaufgaben
Andy: Ich denke, dass wir keine dieser Build-Aufgaben mehr benötigen, da die Dockerdatei im Projektordner bereits den gewünschten Build definiert. Allerdings hatte ich noch nicht die Gelegenheit zu überprüfen, was wir verwenden können, um das Image mit einer Dockerfile-Datei zu erstellen. Irgendwelche Vorschläge?
Mara: Danach habe ich gerade gesucht. Es scheint möglich zu sein, den Container zu erstellen und ihn sogar mit einem einzigen Task in das Repository zu pushen. Fügen wir ihn jetzt hinzu.
Docker-Task
Sie können die Docker-Aufgabe verwenden, um Docker-Images zu erstellen und bereitzustellen. Ersetzen Sie die gesamte Phase Build durch den folgenden YAML-Schnipsel.
- Befehl: Gibt den auszuführenden Docker-Befehl an.
- buildContext: Gibt den Pfad zum Build-Kontext an.
- Repository: Gibt den Namen des Repositorys an.
- Dockerfile: Gibt den Pfad zur Dockerfile-Datei an.
- containerRegistry: Gibt den Namen der Docker-Registrierungsdienstverbindung an.
- tags: Gibt eine Liste von Tags in separaten Zeilen an. Diese Tags werden in Build-, Push- und BuildAndPush-Befehlen verwendet.
- stage: 'Build'
displayName: 'Build and push'
jobs:
- job: 'Build'
displayName: 'Build job'
pool:
vmImage: 'ubuntu-20.04'
steps:
- task: Docker@2
displayName: 'Build and push the image to container registry'
inputs:
command: buildAndPush
buildContext: $(Build.Repository.LocalPath)
repository: $(webRepository)
dockerfile: '$(Build.SourcesDirectory)/Tailspin.SpaceGame.Web/Dockerfile'
containerRegistry: 'Container Registry Connection'
tags: |
$(tag)
Ersetzen des Tasks für die Bereitstellungsphase
Andy: Nun, das scheint ziemlich einfach zu sein. Jetzt müssen wir nur noch einen Task finden, der App Service anweist, die neu gepushte Version des Containerimages zu verwenden.
Mara: Da bin ich bereits dran. Die Vorgehensweise ist ein bisschen anders als die Bereitstellung eines Builds in Azure Pipelines, aber immer noch direkt genug, um die Aufgabe in einem Task zu erledigen. Fügen wir ihn jetzt hinzu.
Task „Azure-Web-App für Container“
Der Azure Web App for Container-Task ist für die Bereitstellung von Docker-Containern für Azure App Service konzipiert. Ersetzen Sie die gesamte Phase Deploy durch den folgenden YAML-Schnipsel.
- appName: Gibt den Namen eines vorhandenen Azure App Services an.
- azureSubscription: Gibt den Namen des Azure Resource Manager-Abonnements für die Bereitstellung an.
- imageName: Gibt den vollqualifizierten Namen für das Containerimage an, zum Beispiel
myregistry.azurecr.io/nginx:latest
oderpython:3.7.2-alpine/
.
- stage: 'Deploy'
displayName: 'Deploy the container'
dependsOn: Build
jobs:
- job: 'Deploy'
displayName: 'Deploy job'
pool:
vmImage: 'ubuntu-20.04'
variables:
- group: Release
steps:
- task: AzureWebAppContainer@1
inputs:
appName: $(WebAppName)
azureSubscription: 'Resource Manager - Tailspin - Space Game'
imageName: $(RegistryName)/$(webRepository):$(build.buildId)
Speichern der Pipeline zum Auslösen eines Build- und Releasevorgangs
Klicken Sie in der oberen rechten Ecke der Seite auf Speichern. Geben Sie Ihre Commit-Nachricht ein, und wählen Sie dann zur Bestätigung Speichern aus.
Wählen Sie Ausführen aus, und stellen Sie sicher, dass der Branch auf main festgelegt ist. Wählen Sie Ausführen aus, sobald Sie fertig sind.
Wählen Sie Ihre Pipeline aus, um die Protokolle anzuzeigen. Wählen Sie nach Abschluss des Builds die Aufgabe AzureWebAppContainer, und wählen Sie dann die App Service-Anwendungs-URL aus, um Ihre bereitgestellte Web-App anzuzeigen.
Ihre Web-App sollte auf App Service ausgeführt werden.
Andy: Das hat super geklappt! Ich denke, die Einführung von Containern könnte ein großer Gewinn für unser Team sein.