Bereitstellen eines benutzerdefinierten Containers in Azure App Service mit Azure Pipelines
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019
Mit Azure Pipelines können Sie Ihre Web-App in einem Azure App Service Web App-Container unter Linux erstellen, testen und automatisch bereitstellen. In diesem Artikel erfahren Sie, wie Sie YAML- oder klassische Pipelines für Folgendes verwenden können:
- Erstellen und Veröffentlichen eines Docker-Images in Azure Container Registry
- Erstellen einer Azure-Web-App
- Bereitstellen eines Containers in Azure App Service
- Bereitstellen in Bereitstellungsslots
Voraussetzungen
- Ein Azure-Konto mit einem aktiven Abonnement. Sie können kostenlos ein Konto erstellen.
- Ein GitHub-Konto. Sofern nicht bereits geschehen, können Sie ein kostenloses GitHub-Konto erstellen.
- Eine Azure DevOps-Organisation. Erstellen Sie eine Organisation, wenn Sie noch keine haben.
- Eine Azure Container Registry. Erstellen Sie eine Azure Container Registry, wenn Sie noch keine haben.
Abrufen des Codes
Forken Sie die folgende Beispiel-App auf GitHub.
https://github.com/spring-guides/gs-spring-boot-docker.git
Erstellen und Veröffentlichen eines Docker-Images in Azure Container Registry
Um diesen Abschnitt erfolgreich abzuschließen, benötigen Sie eine Azure Container Registry. Weitere Informationen finden Sie im Abschnitt zu Voraussetzungen.
Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und navigieren Sie zu Ihrem Projekt.
Wählen Sie Pipelines und dann Neue Pipeline aus.
Wählen Sie GitHub aus, wenn Sie zur Angabe des Speicherorts Ihres Quellcodes aufgefordert werden, und wählen Sie dann Ihr Repository aus.
Wählen Sie die Pipelinevorlage Erstellen und Pushen des Docker-Images für Azure Container Registry aus.
Wählen Sie Ihr Azure-Abonnement und dann Weiter aus.
Wählen Sie im Dropdownmenü Ihre Containerregistrierung aus und wählen Sie dann Überprüfen und Konfigurieren aus.
Überprüfen Sie die YAML-Pipelinevorlage und wählen Sie dann Speichern und ausführen aus, um das Docker-Image zu erstellen und in Ihrem Azure Container Registry zu veröffentlichen.
trigger: - main resources: - repo: self variables: # Container registry service connection established during pipeline creation dockerRegistryServiceConnection: '{{ containerRegistryConnection.Id }}' imageRepository: 'javascriptdocker' containerRegistry: 'sampleappcontainerregistry.azurecr.io' dockerfilePath: '$(Build.SourcesDirectory)/app/Dockerfile' tag: '$(Build.BuildId)' # Agent VM image name vmImageName: 'ubuntu-latest' stages: - stage: Build displayName: Build and push stage jobs: - job: Build displayName: Build pool: vmImage: $(vmImageName) steps: - task: Docker@2 displayName: Build and push an image to container registry inputs: command: buildAndPush repository: $(imageRepository) dockerfile: $(dockerfilePath) containerRegistry: $(dockerRegistryServiceConnection) tags: | $(tag)
Um das veröffentlichte Docker-Image anzuzeigen, nachdem die Pipelineausführung abgeschlossen wurde, navigieren Sie zu Ihrer Containerregistrierung im Azure-Portal und wählen Sie dann Repositorys aus.
Um Ihr Image über die Containerregistrierung bereitzustellen, müssen Sie das Administratorbenutzerkonto aktivieren. Navigieren Sie im Azure-Portal zu Ihrer neuen Containerregistrierung, und wählen Sie Zugriffsschlüssel aus. Wählen Sie als Nächstes die Umschaltfläche Administratorbenutzer aktivieren aus.
Erstellen einer „“-Web-App
Navigieren Sie zum Azure-Portal.
Wählen Sie Ressource erstellen>Container und dann Web-App für Container aus.
Geben Sie einen Namen für Ihre neue Web-App ein und erstellen Sie eine neue Ressourcengruppe. Wählen Sie unter Betriebssystem die Option Linux aus.
Wählen Sie im Abschnitt Preispläne den F1 Free-Plan aus.
Klicken Sie auf Überprüfen und erstellen. Überprüfen Sie Ihre Konfiguration und wählen Sie Erstellen aus, wenn Sie fertig sind.
Bereitstellen in Web-Apps für Container
In diesem YAML erstellen Sie ein Docker-Image, pushen es in eine Containerregistrierung und stellen es dann in Azure-Web-App für Container bereit. In der Buildphase erstellen Sie ein Docker-Image und pushen es mit der Docker@2-Aufgabe an eine Azure Container Registry. Die AzureWebAppContainer@1-Aufgabe stellt das Image in Web-App für Container bereit.
trigger:
- main
resources:
- repo: self
variables:
## Add this under variables section in the pipeline
azureSubscription: <Name of the Azure subscription>
appName: <Name of the Web App>
containerRegistry: <Name of the Azure container registry>
dockerRegistryServiceConnection: '4fa4efbc-59af-4c0b-8637-1d5bf7f268fc'
imageRepository: <Name of image repository>
dockerfilePath: '$(Build.SourcesDirectory)/Dockerfile'
tag: '$(Build.BuildId)'
vmImageName: 'ubuntu-latest'
stages:
- stage: Build
displayName: Build and push stage
jobs:
- job: Build
displayName: Build
pool:
vmImage: $(vmImageName)
steps:
- task: Docker@2
displayName: Build and push an image to container registry
inputs:
command: buildAndPush
repository: $(imageRepository)
dockerfile: $(dockerfilePath)
containerRegistry: $(dockerRegistryServiceConnection)
tags: |
$(tag)
## Add the below snippet at the end of your pipeline
- task: AzureWebAppContainer@1
displayName: 'Azure Web App on Container Deploy'
inputs:
azureSubscription: $(azureSubscription)
appName: $(appName)
containers: $(containerRegistry)/$(imageRepository):$(tag)
Bereitstellen in einem Bereitstellungsslot
Sie können den Azure-Web-App-Container so konfigurieren, dass er mehrere Slots hat. Mit Slots können Sie Ihre App sicher bereitstellen und testen, bevor Sie sie Ihren Kunden zur Verfügung stellen. Weitere Informationen finden Sie unter Erstellen von Stagingumgebungen.
Der folgende YAML-Codeausschnitt zeigt, wie in einem Stagingslot bereitgestellt und dann zu einem Produktionsslot getauscht wird:
- task: AzureWebAppContainer@1
inputs:
azureSubscription: '<Azure service connection>'
appName: '<Name of the web app>'
containers: $(containerRegistry)/$(imageRepository):$(tag)
deployToSlotOrASE: true
resourceGroupName: '<Name of the resource group>'
slotName: staging
- task: AzureAppServiceManage@0
inputs:
azureSubscription: '<Azure service connection>'
WebAppName: '<name of web app>'
ResourceGroupName: '<name of resource group>'
SourceSlot: staging
SwapWithProduction: true
Häufig gestellte Fragen
F: Wie finde ich meine Docker-Registrierungsanmeldeinformationen?
A: Navigieren Sie zum Azure-Portal und wählen Sie dann Ihre Web-App für Container aus. Wählen SieKonfiguration>Anwendungseinstellung aus und klicken Sie dann, um den Wert anzuzeigen.