Een aangepaste container implementeren in Azure-app Service met Azure Pipelines

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Met Behulp van Azure Pipelines kunt u uw web-app bouwen, testen en automatisch implementeren in een Azure-app Service Web App-container in Linux. In dit artikel leert u hoe u YAML- of klassieke pijplijnen gebruikt voor het volgende:

  • Een Docker-installatiekopieën bouwen en publiceren naar Azure Container Registry
  • Een Azure-web-app maken
  • Een container implementeren in Azure-app Service
  • Implementeren naar implementatiesites

Vereisten

Code ophalen

Fork de volgende voorbeeld-app op GitHub.

https://github.com/spring-guides/gs-spring-boot-docker.git

Een Docker-installatiekopieën bouwen en publiceren naar Azure Container Registry

Als u deze sectie wilt voltooien, moet u een Azure Container Registry hebben. Raadpleeg de sectie vereisten voor meer informatie.

  1. Meld u aan bij uw Azure DevOps-organisatie en navigeer naar uw project.

  2. Selecteer Pijplijnen en vervolgens Nieuwe pijplijn.

  3. Selecteer GitHub wanneer u wordt gevraagd om de locatie van uw broncode en selecteer vervolgens uw opslagplaats.

  4. Selecteer Docker : een installatiekopieën bouwen en pushen naar een Azure Container Registry-pijplijnsjabloon .

    Docker-pijplijnsjabloon selecteren

  5. Selecteer uw Azure-abonnement en selecteer vervolgens Doorgaan.

  6. Selecteer uw containerregister in de vervolgkeuzelijst en selecteer vervolgens Valideren en configureren.

    Docker valideren en configureren

  7. Controleer de YAML-sjabloon voor de pijplijn en selecteer Opslaan en uitvoeren om de Docker-installatiekopieën te bouwen en te publiceren in uw Azure Container Registry.

    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. Als u de gepubliceerde Docker-installatiekopieën wilt weergeven nadat de pijplijnuitvoering is voltooid, gaat u naar het containerregister in Azure Portal en selecteert u Opslagplaatsen.

    Docker-installatiekopieën gepubliceerd naar Azure Container Registry

  9. Als u uw installatiekopieën wilt implementeren vanuit het containerregister, moet u het gebruikersaccount van de beheerder inschakelen. Navigeer naar uw containerregister in Azure Portal en selecteer Toegangssleutels. Selecteer vervolgens de wisselknop om Beheer gebruiker in te schakelen.

    Beheer gebruiker inschakelen

Een web-app maken

  1. Ga naar Azure Portal.

  2. Selecteer Een resourcecontainer> maken en kies vervolgens Web App for Containers.

    Een web-app voor containersresource maken

  3. Voer een naam in voor uw nieuwe web-app en maak een nieuwe resourcegroep. Selecteer Linux voor het besturingssysteem.

    De web-app configureren

  4. Kies in de sectie Prijsplannen het gratis F1-abonnement.

  5. Selecteer Controleren en maken. Controleer uw configuratie en selecteer Maken wanneer u klaar bent.

Implementeren in Web App for Containers

In deze YAML bouwt en pusht u een Docker-installatiekopieën naar een containerregister en implementeert u deze vervolgens in Azure Web App for Containers. In de buildfase bouwt en pusht u een Docker-installatiekopieën naar een Azure Container Registry met de Docker@2 taak. Met de AzureWebAppContainer@1 taak wordt de installatiekopieën geïmplementeerd in Web App for Containers.


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)

Implementeren in een implementatiesite

U kunt de Azure Web App-container zo configureren dat er meerdere sites zijn. Met sites kunt u uw app veilig implementeren en testen voordat u deze beschikbaar maakt voor uw klanten. Zie Faseringsomgevingen maken voor meer informatie.

In het volgende YAML-fragment ziet u hoe u implementeert in een staging-site en vervolgens wisselt naar een productiesite:

- 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

Veelgestelde vragen

V: Hoe kan ik mijn Docker-registerreferenties vinden?

A: Navigeer naar Azure Portal en selecteer vervolgens uw Web App for Containers. Selecteer De instellingen van de configuratietoepassing>en klik om de waarde weer te geven.

Een schermopname die laat zien hoe u Docker-registerreferenties kunt vinden.