Compartir vía


Desplegar en Azure Container Apps desde Azure Pipelines

Azure Container Apps permite usar Azure Pipelines para publicar revisiones en la aplicación contenedora. A medida que las confirmaciones se insertan en el repositorio de Azure DevOps, se desencadena una canalización que actualiza la imagen de contenedor en el registro de contenedor. Container Apps crea una nueva revisión basada en la imagen de contenedor actualizada.

Commits en una rama específica de tu repositorio activan el pipeline. 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:

  • Compile a partir de un Dockerfile e implemente 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.
  • Implemente una imagen de contenedor existente en Container Apps.

Con la versión de producción, esta tarea incluye Azure DevOps y no requiere una instalación explícita. Para obtener la documentación completa, consulte AzureContainerApps@1: tarea Implementación de Azure Container Apps v1.

Ejemplos de uso

A continuación se muestran algunos escenarios comunes para usar 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 del 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 del 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 acrUsername y acrPassword parámetros de entrada.

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 compilar una imagen de contenedor en un paso independiente, asegúrese de usar una etiqueta única, como el 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 Container Apps debe autenticarse con Azure Container Registry para insertar la imagen de contenedor. La aplicación de contenedores también debe autenticarse con el registro de contenedores para obtener la imagen de 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 usando acrUsername y acrPassword.

Para extraer imágenes, Container Apps usa la identidad administrada (recomendada) o las credenciales de administrador para autenticarse con el registro de contenedor. 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

Complete los pasos siguientes para configurar una canalización de Azure DevOps para implementarla en 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
  • Asignar el rol AcrPull para el registro del contenedor a la identidad administrada de la aplicación de contenedor
  • 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 Instrucciones
Cuenta de Azure Si no tiene ninguna cuenta, cree una gratuita. Necesita el permiso Colaborador o Propietario en la suscripción de Azure para completar los procedimientos de este artículo. Para más información, consulte Asignación de roles de Azure mediante Azure Portal.
Proyecto de Azure DevOps Vaya a Azure DevOps y seleccione Introducción a Azure. 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.

  1. Inicie sesión en Azure DevOps y vaya al proyecto.

  2. Seleccione Repos en el panel izquierdo.

  3. Seleccione Importar un repositorio.

  4. Escriba los valores siguientes y, a continuación, seleccione Importar:

    Campo Valor
    Tipo de repositorio Git
    URL de clonación https://github.com/Azure-Samples/containerapps-albumapi-csharp.git
  5. Seleccione Importar.

  6. Seleccione Clonar para ver la dirección URL del repositorio y copiarla.

  7. Abra una ventana de comandos y ejecute el siguiente comando:

    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 de contenedor completando los pasos siguientes. El az containerapp up comando crea recursos de Azure, compila la imagen de contenedor, almacena la imagen en un registro e implementa una aplicación contenedora.

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.

  1. Cambie a la carpeta src del repositorio clonado:

    cd my-container-app
    cd src
    
  2. Cree recursos de Azure e implemente una aplicación de contenedor mediante el az containerapp up comando :

    az containerapp up \
      --name my-container-app \
      --source . \
      --ingress external 
    

    Sugerencia

    Si se produce un error en la compilación debido a un repositorio de Debian, asegúrese de que está utilizando la versión más reciente de la CLI de Azure y la extensión containerapp ejecutando az extension add --name containerapp --upgrade. Como alternativa, agregue un Dockerfile al proyecto para tener más control sobre la compilación.

  3. En la salida del comando, anote el nombre del registro de contenedor de Azure.

  4. Obtenga el identificador de recurso completo del registro de contenedor:

    az acr show --name <ACR_NAME> --query id --output tsv
    

    Reemplace <ACR_NAME> por el nombre del registro.

  5. 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 ID principal de la identidad administrada en la salida del comando.

  6. Asigne el AcrPull rol de 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> con el identificador de la entidad principal de la identidad administrada y <ACR_RESOURCE_ID> con el identificador de recurso del Registro de Contenedores.

  7. Configure la aplicación contenedora para usar la identidad administrada para extraer imágenes del registro de contenedor:

    az containerapp registry set \
      --name my-container-app \
      --resource-group my-container-app-rg \
      --server <ACR_NAME>.azurecr.io \
      --identity system
    

    Reemplace por <ACR_NAME> el nombre del registro de contenedor de Azure.

Creación de una conexión de servicio de Azure DevOps

Para realizar la implementación en Container Apps, debe crear una conexión de servicio de Azure DevOps para la suscripción de Azure.

  1. En Azure DevOps, seleccione Configuración del proyecto.

  2. Seleccione Conexiones de servicio.

  3. Seleccione Crear conexión del servicio.

  4. Seleccione Azure Resource Manager y, a continuación, haga clic en Siguiente.

  5. Seleccione Registro de aplicaciones (automático) y, a continuación, seleccione Siguiente.

  6. Proporcione los valores siguientes y, a continuación, seleccione Guardar:

    Campo Valor
    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

  1. En el proyecto de Azure DevOps, seleccione Canalizaciones.

  2. Seleccione Crear canalización.

  3. Seleccione Azure Repos Git.

    Nota:

    Si no ve Git de Azure Repos como opción, asegúrese de que el código fuente se inserta en un repositorio de Git en el proyecto de Azure DevOps.

  4. Seleccione el repositorio que contiene el código fuente (my-container-app).

  5. Seleccione Canalización inicial.

  6. 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 Azure DevOps (my-subscription-service-connection) que creó en el paso anterior. Reemplace por <ACR_NAME> el nombre del registro de contenedor de Azure.

  7. Seleccione Guardar y ejecutar.

Una ejecución de Azure Pipelines comienza a compilar e implementar la aplicación de contenedor. Para comprobar su progreso, acceda 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.