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 explica cómo configurar la integración continua y la entrega continua (CI/CD) para una imagen de contenedor personalizada de repositorios administrados de Azure Container Registry o Docker Hub.
1. Vaya al Centro de implementación
En Azure Portal, vaya al panel de administración de la aplicación de Azure App Service.
En el menú de la barra lateral de Implementación, seleccione Centro de implementación. Elija la pestaña Configuración .
2. Selección del código fuente
En el menú desplegable Origen , seleccione el origen de implementación en función de los criterios siguientes:
- Container Registry configura CI/CD entre el registro de contenedor y App Service.
- Elija la opción Acciones de GitHub si mantiene el código fuente de la imagen de contenedor en GitHub. Las nuevas confirmaciones en el repositorio de GitHub desencadenan la acción de implementación, que se puede ejecutar
docker build
ydocker push
directamente en el registro de contenedor. A continuación, actualiza la aplicación de App Service para ejecutar la nueva imagen. Para obtener más información, consulte Funcionamiento de CI/CD con Acciones de GitHub. - Para configurar CI/CD con Azure Pipelines, consulte Implementación de un contenedor de aplicaciones web de Azure desde Azure Pipelines.
- En una aplicación de Docker Compose, seleccione Container Registry.
Si elige Acciones de GitHub, seleccione Autorizar y siga las indicaciones de autorización. Si ha autorizado previamente con GitHub, puede implementar desde un repositorio de otro usuario seleccionando Cambiar cuenta.
Después de autorizar la cuenta de Azure con GitHub, seleccione la organización, el repositorio y la rama desde la que implementar.
2. Configurar el registro
3. Configurar el registro
Nota
Los contenedores sidecar se realizarán correctamente en aplicaciones de varios contenedores (Docker Compose) en App Service. Para empezar, consulte Tutorial: Configurar un contenedor sidecar para contenedores personalizados en Azure App Service.
Para implementar una aplicación de varios contenedores (Docker Compose), seleccione Docker Compose en Tipo de contenedor.
Si no ve la lista desplegable Tipo de contenedor , desplácese hacia arriba hasta Origen y seleccione Container Registry.
En Origen del registro, seleccione dónde está el registro de contenedor. Si no es Azure Container Registry o Docker Hub, seleccione Registro privado.
Nota
Si la aplicación de varios contenedores (Docker Compose) usa más de una imagen privada, asegúrese de que las imágenes privadas están en el mismo registro privado y son accesibles con las mismas credenciales de usuario. Si la aplicación de varios contenedores solo usa imágenes públicas, seleccione Docker Hub, incluso si algunas imágenes no están en Docker Hub.
Siga los pasos siguientes. Para ello, seleccione la pestaña que coincida con su elección.
La lista desplegable Registro muestra los registros en la misma suscripción que la aplicación. Seleccione el registro que desee.
Para realizar la implementación desde un registro en otra suscripción, seleccione Registro privado en origen del Registro en su lugar.
Para usar identidades administradas para bloquear el acceso a Azure Container Registry, consulte:
- Uso de identidades administradas asignadas por el sistema con App Service y Azure Container Registry
- Uso de identidades administradas asignadas por el usuario con App Service y Azure Container Registry
Seleccione la imagen y la etiqueta que se van a implementar. Puede elegir escribir el comando de inicio en Archivo de inicio.
Siga el paso siguiente, en función del valor tipo de contenedor :
- En Docker Compose, seleccione el registro para las imágenes privadas. Seleccione Elegir archivo para cargar el archivo de Docker Compose o simplemente pegue el contenido del archivo de Docker Compose en Config.
- En Contenedor único, seleccione la imagen y la etiqueta que se van a implementar. Puede elegir escribir el comando de inicio en Archivo de inicio.
App Service anexa la cadena del archivo de inicio al final deldocker run
comando (como el segmento [COMMAND] [ARG...]
) al iniciar el contenedor.
3. Habilitar CI/CD
4. Habilitar CI/CD
App Service admite la integración de CI/CD con Azure Container Registry y Docker Hub. Para habilitar la integración de CI/CD, seleccione Activado en Implementación continua.
Nota
Si selecciona Acciones de GitHub en la fuente, no verá esta opción porque Acciones de GitHub gestiona directamente CI/CD. En su lugar, verá una sección Configuración de flujo de trabajo , donde puede seleccionar Vista previa del archivo para inspeccionar el archivo de flujo de trabajo. Azure confirma este archivo en el repositorio de origen de GitHub seleccionado para controlar las tareas de compilación e implementación. Para obtener más información, consulte Funcionamiento de CI/CD con Acciones de GitHub.
Cuando se habilita esta opción, App Service agrega un webhook al repositorio en Azure Container Registry o Docker Hub. El repositorio se envía a este webhook cada vez que se actualiza la imagen seleccionada con docker push
. El webhook hace que la aplicación App Service se reinicie y ejecute docker pull
para obtener la imagen actualizada.
Para garantizar el funcionamiento adecuado del webhook, es esencial habilitar la opción Credenciales de publicación de autenticación básica en la aplicación web. Si no lo hace, es posible que reciba un error "401 no autorizado" para el webhook.
Para comprobar si las credenciales básicas de publicación de autenticación están habilitadas , vaya a configuración>general de la aplicación web. Busque la sección Configuración de la plataforma y, a continuación, seleccione la opción Credenciales básicas de publicación de autenticación .
Para otros registros privados, puede publicar en el webhook manualmente o como paso en una canalización de CI/CD. En Dirección URL de webhook, seleccione el botón Copiar para obtener la dirección URL del webhook.
Haga clic en Guardar para guardar la configuración.
Nota
La compatibilidad con aplicaciones de varios contenedores (Docker Compose) es limitada. Para Azure Container Registry, App Service crea un webhook en el registro seleccionado con el registro como ámbito. Un docker push
a cualquier repositorio del registro (incluidos los a los que no hace referencia el archivo Docker Compose) desencadena un reinicio de la aplicación. Es posible que desee modificar el webhook para reducir su alcance. Docker Hub no admite webhooks en el nivel del registro. Debe agregar los webhooks manualmente a las imágenes especificadas en el archivo de Docker Compose.
Funcionamiento de CI/CD con Acciones de GitHub
Si elige Acciones de GitHub en el menú desplegable Seleccionar código fuente , App Service configura CI/CD de las maneras siguientes:
- Deposita un archivo de flujo de trabajo de GitHub Actions en tu repositorio de GitHub para gestionar las tareas de compilación e implementación en App Service.
- Agrega las credenciales del registro privado como secretos de GitHub. El archivo de flujo de trabajo generado ejecuta la acción
Azure/docker-login
para iniciar sesión con tu registro privado y, a continuación, ejecutadocker push
para desplegarlo. - Agrega el perfil de publicación de la aplicación como un secreto de GitHub. El archivo de flujo de trabajo generado usa este secreto para autenticarse con App Service y, a continuación, ejecuta la
Azure/webapps-deploy
acción para configurar la imagen actualizada, lo que desencadena un reinicio de la aplicación para extraer la imagen actualizada. - Captura información de los registros de ejecución del flujo de trabajo y la muestra en la pestaña Registros del Centro de implementación de la aplicación.
Puede personalizar el proveedor de compilación de Acciones de GitHub de las siguientes maneras:
- Personalice el archivo de flujo de trabajo después de generarlo en el repositorio de GitHub. Para obtener más información, consulte Sintaxis de flujo de trabajo para Acciones de GitHub. El flujo de trabajo debe terminar con la
Azure/webapps-deploy
acción para desencadenar un reinicio de la aplicación. - Si la rama seleccionada está protegida, todavía puede obtener una vista previa del archivo de flujo de trabajo sin guardar la configuración. Agréguelo y los secretos de GitHub necesarios al repositorio manualmente. Este método no ofrece la integración de registros con Azure Portal.
- En lugar de un perfil de publicación, implemente mediante una entidad de servicio en el identificador de Microsoft Entra.
Autenticación con una entidad de servicio
Esta configuración opcional reemplaza la autenticación predeterminada por los perfiles de publicación en el archivo de flujo de trabajo generado.
Genere una entidad de servicio mediante el az ad sp create-for-rbac
comando en la CLI de Azure. En el ejemplo siguiente, reemplace <subscription-id>, <group-name> y <app-name> por sus propios valores. Guarde la salida JSON completa para el paso siguiente, incluido el nivel {}
superior.
az ad sp create-for-rbac --name "myAppDeployAuth" --role contributor \
--scopes /subscriptions/<subscription-id>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name> \
--json-auth
Importante
Por seguridad, conceda el acceso mínimo necesario a la entidad de servicio. El ámbito del ejemplo anterior se limita a la aplicación específica de App Service y no a todo el grupo de recursos.
En GitHub, vaya al repositorio y, a continuación, seleccione Configuración>Secretos>agregar un nuevo secreto. Pegue la salida JSON completa del comando de la CLI de Azure en el campo de valor del secreto. Asigne al secreto un nombre como AZURE_CREDENTIALS
.
En el archivo de flujo de trabajo generado por el Centro de implementación, revise el azure/webapps-deploy
paso con código similar al ejemplo siguiente:
- name: Sign in to Azure
# Use the GitHub secret you added
- uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Deploy to Azure Web App
# Remove publish-profile
- uses: azure/webapps-deploy@v2
with:
app-name: '<app-name>'
slot-name: 'production'
images: '<registry-server>/${{ secrets.AzureAppService_ContainerUsername_... }}/<image>:${{ github.sha }}'
- name: Sign out of Azure
run: |
az logout
Automatización con la interfaz de la línea de comandos
Para configurar el registro de contenedor y la imagen de Docker, ejecute az webapp config container set
.
az webapp config container set --name <app-name> --resource-group <group-name> --docker-custom-image-name '<image>:<tag>' --docker-registry-server-url 'https://<registry-name>.azurecr.io' --docker-registry-server-user '<username>' --docker-registry-server-password '<password>'
Para configurar una aplicación de varios contenedores (Docker Compose), prepare un archivo de Docker Compose localmente y, a continuación, ejecute az webapp config container set
con el --multicontainer-config-file
parámetro . Si el archivo de Docker Compose contiene imágenes privadas, agregue --docker-registry-server-*
parámetros como se muestra en el ejemplo anterior.
az webapp config container set --resource-group <group-name> --name <app-name> --multicontainer-config-file <docker-compose-file>
Para configurar CI/CD desde el registro de contenedor en la aplicación, ejecute az webapp deployment container config
con el parámetro --enable-cd
. El comando genera la dirección URL del webhook, pero debe crear el webhook en el registro manualmente en un paso independiente. En el ejemplo siguiente se habilita CI/CD en la aplicación y, a continuación, se usa la dirección URL del webhook en la salida para crear el webhook en Azure Container Registry.
ci_cd_url=$(az webapp deployment container config --name <app-name> --resource-group <group-name> --enable-cd true --query CI_CD_URL --output tsv)
az acr webhook create --name <webhook-name> --registry <registry-name> --resource-group <group-name> --actions push --uri $ci_cd_url --scope '<image>:<tag>'
Contenido relacionado
- Azure Container Registry
- Creación de una aplicación web de .NET Core en App Service en Linux
- Inicio rápido: Ejecución de un contenedor personalizado en App Service
- Preguntas más frecuentes sobre App Service en Linux
- Configuración de contenedores personalizados
- Flujos de trabajo de acciones para implementar en Azure