Implementación en Azure Container Apps desde Azure Pipelines
Azure Container Apps permite usar Azure Pipelines para publicar revisiones en la aplicación de contenedor. A medida que se insertan confirmaciones en el repositorio de Azure DevOps, se desencadena una canalización que actualiza la imagen del contenedor en el registro de contenedor. Azure Container Apps crea una revisión basada en la imagen de contenedor actualizada.
Confirma en una rama específica del repositorio que desencadena la canalización. Al crear la canalización, el usuario decide qué rama es el desencadenador.
Tarea de Container Apps en Azure Pipelines
La tarea admite los escenarios siguientes:
- Compilación a partir de un Dockerfile e implementación en Container Apps
- Compilación a partir del código fuente sin Dockerfile e implementación en Container Apps. Entre los lenguajes admitidos, se incluyen .NET, Java, Node.js, PHP y Python
- Implementación de una imagen de contenedor existente en Container Apps
Con la versión de producción, esta tarea viene incluida con Azure DevOps, por lo que ya no requiere instalación. Para obtener la documentación completa, consulte AzureContainerApps@1: tarea Implementación de Azure Container Apps v1.
Ejemplos de uso
Estos son algunos de los escenarios más comunes para utilizar la tarea. Para obtener más información, vea la documentación de la tarea.
Compilación e implementación en Container Apps
En el fragmento de código siguiente se muestra cómo compilar una imagen de contenedor a partir del código fuente y cómo implementarla en Container Apps.
steps:
- task: AzureContainerApps@1
inputs:
appSourcePath: '$(Build.SourcesDirectory)/src'
azureSubscription: 'my-subscription-service-connection'
acrName: 'myregistry'
containerAppName: 'my-container-app'
resourceGroup: 'my-container-app-rg'
La tarea usa el Dockerfile en appSourcePath
para compilar la imagen de contenedor. Si no se encuentra ningún Dockerfile, la tarea intenta compilar la imagen de contenedor a partir del código fuente en appSourcePath
.
Implementación de una imagen de contenedor existente en Container Apps
En el fragmento de código siguiente se muestra cómo implementar una imagen de contenedor existente en Container Apps. La tarea se autentica con el Registro mediante la conexión de servicio. Si la identidad de la conexión de servicio no tiene asignado el rol AcrPush
para el Registro, proporcione las credenciales de administrador del registro mediante los parámetros de entrada acrUsername
y acrPassword
.
steps:
- task: AzureContainerApps@1
inputs:
azureSubscription: 'my-subscription-service-connection'
containerAppName: 'my-container-app'
resourceGroup: 'my-container-app-rg'
imageToDeploy: 'myregistry.azurecr.io/my-container-app:$(Build.BuildId)'
Importante
Si va a crear una imagen de contenedor en un paso independiente, asegúrese de usar una etiqueta única como identificador de compilación en lugar de una etiqueta estable como latest
. Para más información, consulte Procedimientos recomendados de etiquetas de imagen.
Autenticación con Azure Container Registry
La tarea de Azure Container Apps debe autenticarse con Azure Container Registry para insertar la imagen de contenedor. La aplicación contenedora también debe autenticarse con Azure Container Registry para extraer la imagen del contenedor.
Para insertar imágenes, la tarea se autentica automáticamente con el registro de contenedor especificado en acrName
mediante la conexión de servicio proporcionada en azureSubscription
. Si la identidad de la conexión de servicio no tiene asignado el rol AcrPush
para el Registro, proporcione las credenciales de administrador del registro mediante acrUsername
y acrPassword
.
Para extraer imágenes, Azure Container Apps usa una identidad administrada (recomendada) o credenciales de administrador para autenticarse con Azure Container Registry. La aplicación contenedora de destino de la tarea debe configurarse para usar la identidad administrada. Para autenticarse con las credenciales de administrador del registro, establezca las entradas acrUsername
y acrPassword
de la tarea.
Configuración
Siga estos pasos para configurar una canalización de Azure DevOps a fin de implementarla en Azure Container Apps.
- Creación de un repositorio de Azure DevOps para la aplicación
- Creación de una aplicación de contenedor con identidad administrada habilitada
- Asignación del rol
AcrPull
de Azure Container Registry a la identidad administrada de la aplicación contenedora - Instalación de la tarea de Azure Container Apps desde Marketplace de Azure DevOps
- Configuración de una conexión del servicio Azure DevOps para la suscripción de Azure
- Creación de una canalización de Azure DevOps
Requisitos previos
Requisito | Instructions |
---|---|
Cuenta de Azure | Si no tiene ninguna cuenta, cree una gratuita. Necesita el permiso Colaborador o Propietario en la suscripción de Azure para continuar. Consulte Asignación de roles de Azure mediante Azure Portal para obtener más información. |
Proyecto de Azure DevOps | Vaya a Azure DevOps y seleccione Comenzar gratis. A continuación, cree un nuevo proyecto. |
CLI de Azure | Instale la CLI de Azure. |
Creación de un repositorio de Azure DevOps y clonación del código fuente
Antes de crear una canalización, el código fuente de la aplicación debe estar en un repositorio.
Inicie sesión en Azure DevOps y vaya a su proyecto.
Abra la página Repositorios.
En la barra de navegación superior, seleccione la lista desplegable de repositorios y elija Importar repositorio.
Escriba la información siguiente y seleccione Importar:
Campo Value Tipo de repositorio Git URL de clonación https://github.com/Azure-Samples/containerapps-albumapi-csharp.git
Nombre my-container-app
Seleccione Clonar para ver la dirección URL del repositorio y copiarla.
Abra un terminal y ejecute el comando siguiente:
git clone <REPOSITORY_URL> my-container-app
Reemplace
<REPOSITORY_URL>
por la dirección URL que ha copiado.
Creación de una aplicación de contenedor y configuración de una identidad administrada
Cree la aplicación contenedora mediante el comando az containerapp up
con los pasos siguientes. Este comando crea recursos de Azure, compila la imagen de contenedor, almacena la imagen en un registro e implementa en una aplicación de contenedor.
Después de crear la aplicación, puede agregar una identidad administrada a la aplicación y asignar la identidad al rol AcrPull
para permitir que la identidad extraiga imágenes del registro.
Cambie a la carpeta src del repositorio clonado.
cd my-container-app cd src
Cree recursos de Azure e implemente una aplicación de contenedor con el comando
az containerapp up
.az containerapp up \ --name my-container-app \ --source . \ --ingress external
En la salida del comando, anote el nombre de la instancia de Azure Container Registry.
Obtenga el identificador completo del recurso del registro de contenedor.
az acr show --name <ACR_NAME> --query id --output tsv
Reemplace
<ACR_NAME>
por el nombre del registro.Habilite la identidad administrada para la aplicación contenedora.
az containerapp identity assign \ --name my-container-app \ --resource-group my-container-app-rg \ --system-assigned
Anote el identificador de entidad de seguridad de la identidad administrada en la salida del comando.
Asigne el rol
AcrPull
de Azure Container Registry a la identidad administrada de la aplicación contenedora.az role assignment create \ --assignee <MANAGED_IDENTITY_PRINCIPAL_ID> \ --role AcrPull \ --scope <ACR_RESOURCE_ID>
Reemplace
<MANAGED_IDENTITY_PRINCIPAL_ID>
por el identificador de entidad de seguridad de la identidad administrada y<ACR_RESOURCE_ID>
por el identificador de recurso de la instancia de Azure Container Registry.Configure la aplicación contenedora para usar la identidad administrada para extraer imágenes de Azure Container Registry.
az containerapp registry set \ --name my-container-app \ --resource-group my-container-app-rg \ --server <ACR_NAME>.azurecr.io \ --identity system
Reemplace
<ACR_NAME>
por el nombre de Azure Container Registry.
Creación de una conexión de servicio de Azure DevOps
Para implementar en Azure Container Apps, debe crear una conexión de servicio de Azure DevOps para la suscripción de Azure.
En Azure DevOps, seleccione Configuración del proyecto.
Seleccione Conexiones de servicio.
Seleccione Nueva conexión de servicio.
Seleccione Azure Resource Manager.
Seleccione Entidad de servicio (automática) y, a continuación, Siguiente.
Escriba la información siguiente y seleccione Guardar:
Campo Value Suscripción Seleccione su suscripción a Azure. Grupo de recursos Seleccione el grupo de recursos ( my-container-app-rg
) que contiene la aplicación contenedora y el registro de contenedor.Nombre de conexión de servicio my-subscription-service-connection
Para obtener más información sobre las conexiones de servicio, consulte Conexión a Microsoft Azure.
Creación de una canalización YAML de Azure DevOps
En el proyecto de Azure DevOps, seleccione Canalizaciones.
Selecciona Nueva canalización.
Seleccione Git de Azure Repos.
Seleccione el repositorio que contiene el código fuente (
my-container-app
).Seleccione Canalización inicial.
En el editor, reemplace el contenido del archivo por el código YAML siguiente:
trigger: branches: include: - main pool: vmImage: ubuntu-latest steps: - task: AzureContainerApps@1 inputs: appSourcePath: '$(Build.SourcesDirectory)/src' azureSubscription: '<AZURE_SUBSCRIPTION_SERVICE_CONNECTION>' acrName: '<ACR_NAME>' containerAppName: 'my-container-app' resourceGroup: 'my-container-app-rg'
Reemplace
<AZURE_SUBSCRIPTION_SERVICE_CONNECTION>
por el nombre de la conexión del servicio de Azure DevOps (my-subscription-service-connection
) que creó en el paso anterior y<ACR_NAME>
por el nombre de su instancia de Azure Container Registry.Seleccione Guardar y ejecutar.
Una ejecución de Azure Pipelines comienza a compilar e implementar la aplicación de contenedor. Para comprobar su progreso, vaya a Canalizaciones y seleccione la ejecución. Durante la primera ejecución de canalización, es posible que se le pida que autorice a la canalización a usar la conexión de servicio.
Para implementar una nueva revisión de la aplicación, inserte una nueva confirmación en la rama principal.