Bereitstellen in einer Azure-Web-App für Container

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018

Mit Azure Pipelines können Sie Ihre Web-App in Azure Web App für Container erstellen, testen und automatisch bereitstellen. In diesem Artikel erfahren Sie, wie Sie YAML- oder klassische Pipelines verwenden, um:

  • Erstellen und Veröffentlichen eines Docker-Images in Azure Container Registry
  • Erstellen einer Web-App für Container
  • Bereitstellen in Azure Web App für Container
  • Bereitstellen von Bereitstellungsplätzen

Voraussetzungen

Abrufen des Codes

Verzweigen Sie die Beispiel-App in GitHub oder Azure Repos, um zusammen mit diesem Lernprogramm zu folgen.

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, müssen Sie über eine Azure Container Registry verfügen. Weitere Informationen finden Sie im Abschnitt "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 Eingabe des Speicherorts Ihres Quellcodes aufgefordert werden, und wählen Sie dann Ihr Repository aus.

  4. Wählen Sie "Docker: Erstellen und Verschieben eines Images in Azure Container Registry Pipelinevorlage" aus.

    Select Docker pipeline template

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

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

    Validate and configure Docker

  7. Überprüfen Sie die YaML-Pipelinevorlage, und wählen Sie dann "Speichern" aus, um das Docker-Image in Ihrem Azure Container Registry 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: 'sampleappcontinerregistry.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 in Azure-Portal zur Containerregistrierung, und wählen Sie dann Repositorys aus.

    Docker image published to Azure Container Registry

  9. Um Ihr Image aus der Containerregistrierung bereitzustellen, müssen Sie das Administratorbenutzerkonto aktivieren. Navigieren Sie zu Ihrer Containerregistrierung in Azure-Portal, und wählen Sie Access-Schlüssel aus. Wählen Sie als Nächstes die Umschaltfläche aus, um Admin Benutzer zu aktivieren.

    Enable Admin user

Erstellen einer Web-App für Container

  1. Navigieren Sie zum Azure-Portal.

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

    Create a web app for containers resource

  3. Geben Sie einen Namen für Ihre neue Web-App ein, und erstellen Sie eine neue Ressourcengruppe. Wählen Sie Linux für das Betriebssystem aus.

    Configure the web app

  4. Wählen Sie im Abschnitt "SKU und Größe " die Option "Größe ändern " aus, um die Preisstufe anzugeben. Wählen Sie den Dev/Test-Plan aus, und wählen Sie dann den F1 Kostenlosen Plan aus. Wählen Sie " Übernehmen" aus, wenn Sie fertig sind.

    Change pricing tier to free

  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


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)
        imageName: $(containerRegistry)/$(imageRepository):$(tag)

Bereitstellen eines Bereitstellungsplatzes

Sie können den Azure Web App-Container so konfigurieren, dass mehrere Steckplätze vorhanden sind. Mit Slots können Sie Ihre App sicher bereitstellen und testen, bevor Sie sie Ihren Kunden zur Verfügung stellen. Weitere Details 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>'
    imageName: $(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 kann ich meine Docker-Registrierungsanmeldeinformationen finden?

A: Navigieren Sie zu Azure-Portal, und wählen Sie dann Ihre Web App für Container aus. Wählen Siedie Konfigurationsanwendungseinstellungen> aus, und klicken Sie dann, um den Wert anzuzeigen.

A screenshot showing how to find Docker registry credentials.