Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se describe cómo implementar una aplicación contenedora de Windows en Azure App Service desde un repositorio de Git de Azure Repos mediante Azure Pipelines integración continua y entrega continua (CI/CD). Azure Repos y Azure Pipelines son servicios de Azure DevOps gratuitos que permiten hospedar, compilar, planear y probar el código mediante cualquier plataforma y nube. La canalización se define como un archivo YAML en el directorio raíz del repositorio.
Requisitos previos
- Una cuenta de Azure con una instancia del Registro de Azure Container Registry y una aplicación web creada en Azure App Service. Crear una cuenta de Azure gratuita.
- Una organización y un proyecto de Azure DevOps, con una aplicación de Windows que se ejecuta en un contenedor de Docker y un Dockerfile de soporte registrado en un repositorio Azure Repos en tu proyecto.
- Los roles o permisos de usuario adecuados para crear y administrar recursos de Azure y proyectos de Azure DevOps, canalizaciones, repositorios y conexiones de servicio. Para obtener más información, consulte Administrar la seguridad en Azure Pipelines.
Adición de una conexión de servicio
Antes de crear esta canalización, debe crear una conexión de servicio Azure a Azure Container Registry. En Azure DevOps, seleccione Configuración del proyecto para el proyecto y cree la conexión de servicio siguiendo las instrucciones de Crear una conexión de servicio.
Para crear la conexión de servicio para este proyecto y canalización, elija Docker Registry y elija Azure Container Registry como tipo de registro. Después de crear la conexión de servicio, copie su identificador para usarlo en un paso posterior.
Creación y configuración de la canalización
Cree y configure una canalización para ejecutar los pasos para compilar el contenedor, publicar en el registro e implementar la imagen en App Service.
Cree la canalización siguiendo estos pasos:
- En el proyecto de Azure DevOps, seleccione Pipelines en el menú de navegación izquierdo y seleccione Crear o Crear canalización.
- En la pantalla ¿Dónde está tu código?, seleccione Azure Repos Git.
- En la pantalla Elegir un repositorio , seleccione el repositorio que contiene la aplicación.
- En la pantalla Configurar su canalización, seleccione Canalización inicial.
- Seleccione la flecha desplegable situada junto a Guardar y ejecutar en la esquina superior derecha y seleccione Guardar y, a continuación, seleccione Guardar de nuevo. Todavía no ejecute la canalización.
Creación de variables
Puede crear variables de canalización para reutilizar los valores usados con frecuencia o proteger la información segura a la que no desea que otros usuarios accedan. Para obtener más información, consulte Definición de variables.
Seleccione Editar en la esquina superior derecha de la página de canalización y, a continuación, seleccione Variables en la esquina superior derecha de la página de edición.
En la pantalla Variables , seleccione Nueva variable.
Agregue los siguientes pares nombre/valor con su propia información para los valores de marcador de posición. Seleccione Aceptar después de agregar cada variable y, a continuación, seleccione + para agregar la siguiente variable. Si el valor es un secreto, active la casilla mantener este secreto de valor.
- vmImageName: windows-latest
- Repositorio de imágenes: <repository-name>
- dockerfilePath: $(Build.SourcesDirectory)/<folder-path>/Dockerfile
- dockerRegistryServiceConnection: <service-connection-ID>
Después de agregar las variables, seleccione Guardar en la pantalla Variables y seleccione Guardar de nuevo en la página de canalización.
Adición de una tarea para compilar e insertar la imagen
Reemplace todo el código existente en el archivo de inicio azure-pipelines.yml por el código siguiente. Este código agrega una tarea de Docker que compila e inserta la imagen en Azure Container Registry. El código usa la $(<variable-name>) sintaxis para llamar a las variables que configuró anteriormente.
trigger:
- main
pool:
vmImage:
$(vmImageName)
stages:
- stage: Build
displayName: Build and push stage
jobs:
- job: Build
displayName: Build job
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)
Adición de la tarea de implementación de App Service
Agregue la tarea de implementación a Azure App Service. Esta tarea requiere que especifique el nombre de la suscripción Azure, el nombre de la aplicación web y el nombre del registro de contenedor.
Agregue la fase de implementación al archivo azure-pipelines.yml agregando el código siguiente al final del archivo.
- stage: Deploy displayName: Deploy to App Service jobs: - job: Deploy displayName: Deploy pool: vmImage: $(vmImageName) steps:Coloque el cursor en una nueva línea al final del archivo y, si es necesario, seleccione el icono Mostrar asistente situado a la derecha para mostrar el panel Tareas . En el panel Tasks, busque y seleccione la tarea Azure App Service deploy.
En la pantalla Azure App Service deploy, complete la siguiente información:
- Tipo de Conexión: Seleccione Azure Resource Manager.
- Azure suscripción: seleccione el nombre y el identificador de la suscripción de Azure. Si es necesario, seleccione Autorizar.
- App Service type: Seleccione Web App for Containers (Windows).
- Nombre de App Service: seleccione o escriba el nombre de la aplicación web de App Service.
- Registry o Namespace: escriba el nombre de la instancia de Azure Container Registry.
- Imagen: escriba el nombre del repositorio donde se almacena el código.
Selecciona Agregar. El siguiente código se agrega al final del archivo, donde sus valores reemplazan los marcadores de posición.
- task: AzureRmWebAppDeployment@4 inputs: ConnectionType: 'AzureRM' azureSubscription: '<your subscription name (subscription ID)>' appType: 'webAppHyperVContainer' WebAppName: '<your App Service web app name>' DockerNamespace: '<your Azure Container Registry instance name>' DockerRepository: '<your repository name>'
Ejecución de la canalización
La canalización ya está lista para ejecutarse.
- Seleccione Validar y guardar y vuelva a seleccionar Guardar .
- Seleccione Ejecutar y vuelva a seleccionar Ejecutar .
La canalización sigue los pasos para construir y enviar la imagen del contenedor de Windows a Azure Container Registry y para implementar la imagen en App Service.
En el código siguiente se muestra el archivo de definición completo de azure-pipelines.yml de canalización con valores de ejemplo.
trigger:
- main
pool:
vmImage:
$(vmImageName)
stages:
- stage: Build
displayName: Build and push stage
jobs:
- job: Build
displayName: Build job
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)
- stage: Deploy
displayName: Deploy to App Service
jobs:
- job: Deploy
displayName: Deploy
pool:
vmImage: $(vmImageName)
steps:
- task: AzureRmWebAppDeployment@4
inputs:
ConnectionType: 'AzureRM'
azureSubscription: 'mysubscription(00000000-0000-0000-0000-000000000000)'
appType: 'webAppHyperVContainer'
WebAppName: 'myWindowsDockerSample'
DockerNamespace: 'mycontainerregistry'
DockerRepository: 'myrepository'