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

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.

  1. Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und navigieren Sie zu Ihrem Projekt.

  2. Wählen Sie Pipelines und dann Neue Pipeline aus.

  3. Wählen Sie GitHub aus, wenn Sie zur Angabe des Speicherorts Ihres Quellcodes aufgefordert werden, und wählen Sie dann Ihr Repository aus.

  4. Wählen Sie die Pipelinevorlage Erstellen und Pushen des Docker-Images für Azure Container Registry aus.

    Auswahl der Docker-Pipelinevorlage

  5. Wählen Sie Ihr Azure-Abonnement und dann Weiter aus.

  6. Wählen Sie im Dropdownmenü Ihre Containerregistrierung aus und wählen Sie dann Überprüfen und Konfigurieren aus.

    Überprüfen und konfigurieren von Docker

  7. Ü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)
    
  8. 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.

    Docker-Image, das in der Azure Container Registry veröffentlicht wurde

  9. 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.

    Administratorbenutzer aktivieren

Erstellen einer „“-Web-App

  1. Navigieren Sie zum Azure-Portal.

  2. Wählen Sie Ressource erstellen>Container und dann Web-App für Container aus.

    Erstellen einer Ressource für Web-App für Container

  3. 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.

    Konfigurieren der Web-App

  4. Wählen Sie im Abschnitt Preispläne den F1 Free-Plan aus.

  5. 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.

Ein Screenshot der Suche nach Docker-Registrierungsanmeldeinformationen.