Share via


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.

La canalización se desencadena como consecuencia de las confirmaciones en una rama específica del repositorio. 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.

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

  2. Abra la página Repositorios.

  3. En la barra de navegación superior, seleccione la lista desplegable de repositorios y elija Importar repositorio.

  4. 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
  5. Seleccione Clonar para ver la dirección URL del repositorio y copiarla.

  6. Abra un terminal y ejecute el comando siguiente para clonar el repositorio:

    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.

  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 con el comando az containerapp up.

    az containerapp up \
      --name my-container-app \
      --source . \
      --ingress external 
    
  3. En la salida del comando, anote el nombre de la instancia de Azure Container Registry.

  4. 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.

  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 \
      --output tsv
    

    Anote el identificador de entidad de seguridad de la identidad administrada en la salida del comando.

  6. 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.

  7. 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.

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

  2. Seleccione Conexiones de servicio.

  3. Seleccione Nueva conexión de servicio.

  4. Seleccione Azure Resource Manager.

  5. Seleccione Entidad de servicio (automática) y, a continuación, Siguiente.

  6. 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

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

  2. Selecciona Nueva canalización.

  3. Seleccione Git de Azure Repos.

  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 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.

  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, vaya a Canalizaciones y seleccione la ejecución. Durante la primera ejecución de la canalización, es posible que se le pida que autorice la canalización para 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.