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
- Una cuenta de Azure con una suscripción activa. Cree una cuenta gratuita.
- Una cuenta de GitHub. Cree una cuenta de GitHub gratuita si aún no tiene una.
- Una organización de Azure DevOps. Cree una organización, si aún no tiene ninguna.
- Una instancia de Azure Container Registry. Cree un registro de contenedor de Azure si aún no tiene uno.
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.
Inicie sesión en su organización de Azure DevOps y vaya a su proyecto.
Seleccione Canalizaciones y, luego, Nueva canalización.
Seleccione GitHub cuando se le solicite la ubicación del código fuente y, a continuación, seleccione el repositorio.
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).
En Suscripción de Azure, seleccione su suscripción y, luego, elija Continuar.
Seleccione el registro de contenedor en el menú desplegable y, a continuación, seleccione Validar y configurar.
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)
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.
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.
Crear una aplicación web de
Navegue hasta Azure Portal.
Seleccione Crear un recurso>Contenedores y, a continuación, elija Aplicación web para contenedores.
Escriba un nombre para la nueva aplicación web y cree un nuevo grupo de recursos. Seleccione Linux como Sistema operativo.
En la sección Planes de precios, elija el plan F1 gratuito.
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.