Freigeben über


Bereitstellen eines benutzerdefinierten Containers in Azure App Service mit Azure Pipelines

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022 | Azure DevOps Server 2020

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 verwenden, um:

  • Erstellen und veröffentlichen Sie ein Docker-Image in der Azure-Containerregistrierung.
  • Erstellen Sie eine Azure Web App.
  • Stellen Sie einen Container in Azure App Service bereit.
  • Bereitstellung auf Bereitstellungs-Slots.

Voraussetzungen

Produkt Anforderungen
Azure DevOps – Eine Azure DevOps-Organisation und ein Projekt. Erstellen Sie ein kostenloses Konto.
- Berechtigungen:
    – Um Zugriff auf alle Pipelines im Projekt zu gewähren: Sie müssen Mitglied der Gruppe "Projektadministratoren" sein.
    – Um Dienstverbindungen zu erstellen: Sie müssen über die Rolle "Administrator " oder " Ersteller " für Dienstverbindungen verfügen.
– Eine Möglichkeit zum Ausführen von Pipelines auf von Microsoft gehosteten Agenten. Sie können entweder einen parallelen Auftrag erwerben oder ein kostenloses Kontingent anfordern.
GitHub (Englisch) - Ein GitHub-Konto .
Azurblau – Eine Azure-Containerregistrierung. 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.

  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.

    Screenshot zur 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.

    Screenshot des Bildschirms

  7. Überprüfen Sie die YAML-Pipelinevorlage und wählen Sie dann Speichern und Ausführen, um das Docker-Image in der Azure-Containerregistrierung zu erstellen und 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 ist, wechseln Sie zur Containerregistrierung im Azure-Portal, und wählen Sie dann Repositorys aus.

    Screenshot des Docker-Images, das in azure Container Registry veröffentlicht wurde.

  9. Um das Image aus der Containerregistrierung bereitzustellen, aktivieren Sie das Administratorbenutzerkonto. Wechseln Sie zur Containerregistrierung im Azure-Portal, und wählen Sie Zugriffstasten aus. Wählen Sie dann die Umschaltfläche aus, um den Administratorbenutzer zu aktivieren.

Erstellen einer „“-Web-App

  1. Navigieren Sie zum Azure-Portal.

  2. Wählen Sie "Eine Ressource erstellen">, dann "Container", und schließlich "Web App für Container" aus.

    Screenshot des Erstellens einer Web-App für containerressourcen.

  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.

    Screenshot der Konfiguration 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

Konfigurieren Sie den Azure Web App-Container für mehrere Steckplätze. Mithilfe von Slots können Sie Ihre App sicher bereitstellen und testen, bevor Sie sie Ihren Kunden zur Verfügung stellen. Weitere Informationen finden Sie in "Stagingumgebungen erstellen".

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: Wechseln Sie zum Azure-Portal, und wählen Sie Ihre Web App für Container aus. Wählen Siedie Konfigurationsanwendungseinstellungen> aus, und wählen Sie dann aus, um den Wert anzuzeigen.

Screenshot des Azure-Portals, in dem gezeigt wird, wie Sie Docker-Registrierungsanmeldeinformationen finden.