Implementación de un contenedor personalizado en Azure App Service con Azure Pipelines

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

Con Azure Pipelines, se puede compilar, probar e implementar automáticamente aplicaciones web en un contenedor de aplic. web de Azure App Service en Linux. En este artículo, aprenderá a usar canalizaciones YAML o clásicas para:

  • Compilación y publicación de la imagen de Docker en Azure Container Registry
  • Creación de una aplicación web de Azure
  • Implementación de un contenedor en Azure App Service
  • Implementación en ranuras de implementación

Requisitos previos

Obtención del código

Bifurque la siguiente aplicación de ejemplo en GitHub.

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

Compilación y publicación de la imagen de Docker en Azure Container Registry

Para completar esta sección correctamente, debe tener una Azure Container Registry. Consulte la sección Requisitos previos para más información.

  1. Inicie sesión en su organización de Azure DevOps y vaya a su proyecto.

  2. Seleccione Canalizaciones y, luego, Nueva canalización.

  3. Seleccione GitHub cuando se le solicite la ubicación del código fuente y, a continuación, seleccione el repositorio.

  4. Seleccione Docker: build and push an image to Azure Container Registry pipeline template (Docker: compilar e insertar una imagen en Azure Container Registry plantilla de canalización).

    Seleccionar plantilla de canalización de Docker

  5. En Suscripción de Azure, seleccione su suscripción y, luego, elija Continuar.

  6. Seleccione el registro de contenedor en el menú desplegable y, a continuación, seleccione Validar y configurar.

    Validar y configurar Docker

  7. Revise la plantilla YAML de canalización y, a continuación, seleccione Guardar y ejecutar para compilar y publicar la imagen de Docker en el 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. Para ver la imagen de Docker publicada una vez completada la ejecución de la canalización, vaya al registro de contenedor en Azure Portal y seleccione Repositorios.

    Una imagen de Docker publicada en Azure Container Registry

  9. Para implementar la imagen desde el registro de contenedor, debe habilitar la cuenta de usuario administrador. Vaya al registro de contenedor de Azure Portal y seleccione Claves de acceso. A continuación, seleccione el botón de alternancia para habilitar Administración usuario.

    Habilitar el usuario administrador

Crear una aplicación web de

  1. Navegue hasta Azure Portal.

  2. Seleccione Crear un recurso>Contenedores y, a continuación, elija Aplicación web para contenedores.

    Creación de una aplicación web para contenedores

  3. Escriba un nombre para la nueva aplicación web y cree un nuevo grupo de recursos. Seleccione Linux como Sistema operativo.

    Configuración de la aplicación web

  4. En la sección Planes de precios, elija el plan F1 gratuito.

  5. Seleccione Revisar y crear. Revise la configuración y seleccione Crear cuando haya terminado.

Implementación en Web App for Containers

En este YAML, compilará e insertará una imagen de Docker en un registro de contenedor y, a continuación, la implementará en Azure Web App for Containers. En la fase de compilación, compilará e insertará una imagen de Docker en un Azure Container Registry con la tarea Docker@2. La tarea AzureWebAppContainer@1 implementa la imagen en 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)

Implementación en ranuras de implementación

Puede configurar el contenedor de Aplicación web de Azure para que tenga varias ranuras. Las ranuras permiten implementar la aplicación de forma segura y probarla antes de ponerla a disposición de los clientes. Consulte Creación de entornos de ensayo para obtener más detalles.

El siguiente fragmento de código YAML muestra cómo implementar en un espacio de ensayo y, a continuación, cambiar a un espacio de producción:

- 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

Preguntas más frecuentes

P: ¿Cómo puedo encontrar mis credenciales del registro de Docker?

R: Vaya a Azure Portal y, a continuación, seleccione la aplicación web para contenedores. Seleccione Configuración>Configuración de la aplicación y haga clic para mostrar el valor.

Captura de pantalla que muestra cómo buscar credenciales del registro de Docker.