Share via


Implementación en Azure Container Apps con Acciones de GitHub

Azure Container Apps permite usar Acciones de GitHub para publicar revisiones en la aplicación de contenedor. A medida que los commits se insertan en su repositorio de GitHub, se activa un flujo de trabajo que actualiza la imagen del contenedor en el registro de contenedores. Azure Container Apps crea una revisión basada en la imagen de contenedor actualizada.

Los cambios realizados en un repositorio de GitHub desencadenan una acción para crear una revisión.

El flujo de trabajo de Acciones de GitHub se desencadena como consecuencia de las confirmaciones en una rama específica del repositorio. Al crear el flujo de trabajo, usted decide qué rama activa el flujo de trabajo.

En este artículo se muestra cómo crear un flujo de trabajo totalmente personalizable. Para generar un flujo de trabajo de inicio de Acciones de GitHub con la CLI de Azure, consulte Flujo de trabajo de generación de Acciones de GitHub con la CLI de Azure.

Acción de GitHub de Azure Container Apps

Para compilar e implementar la aplicación contenedora, agregue la acción azure/container-apps-deploy-action al flujo de trabajo de Acciones de GitHub.

La acción admite los siguientes escenarios:

  • 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

Ejemplos de uso

Estos son algunos de los escenarios más comunes para utilizar la acción. Para más información, consulte la página de Marketplace de GitHub de la acción.

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:

  - name: Log in to Azure
    uses: azure/login@v1
    with:
      creds: ${{ secrets.AZURE_CREDENTIALS }}

  - name: Build and deploy Container App
    uses: azure/container-apps-deploy-action@v1
    with:
      appSourcePath: ${{ github.workspace }}/src
      acrName: myregistry
      containerAppName: my-container-app
      resourceGroup: my-rg

La acción usa el Dockerfile en appSourcePath para compilar la imagen de contenedor. Si no se encuentra ningún Dockerfile, la acción 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.

steps:

  - name: Log in to Azure
    uses: azure/login@v1
    with:
      creds: ${{ secrets.AZURE_CREDENTIALS }}

  - name: Build and deploy Container App
    uses: azure/container-apps-deploy-action@v1
    with:
      acrName: myregistry
      containerAppName: my-container-app
      resourceGroup: my-rg
      imageToDeploy: myregistry.azurecr.io/app:${{ github.sha }}

Importante

Si va a crear una imagen de contenedor en un paso independiente, asegúrese de usar una etiqueta única como commit SHA 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 acción 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 acción se autentica automáticamente con el registro de contenedor especificado en acrName mediante las credenciales proporcionadas a la acción azure/login.

Para extraer imágenes, Azure Container Apps usa una identidad administrada (recomendada) o credenciales de administrador para autenticarse con Azure Container Registry. Para usar la identidad administrada, la aplicación contenedora que implementa la acción debe configurarse para usar la identidad administrada. Para autenticarse con las credenciales de administrador del registro, establezca las entradas acrUsername y acrPassword de la acción.

Configuración

Siga estos pasos para configurar un flujo de trabajo de Acciones de GitHub para implementarlo en Azure Container Apps.

  • Creación de un repositorio de GitHub 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
  • Configuración de secretos en el repositorio de GitHub
  • Creación de un flujo de trabajo de Acciones de GitHub

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.
Cuenta de GitHub Regístrese gratis.
CLI de Azure Instale la CLI de Azure.

Creación de un repositorio de GitHub y clonación de código fuente

Antes de crear el flujo de trabajo, el código fuente de la aplicación debe estar en un repositorio de GitHub.

  1. Inicio de sesión en Azure con la CLI de Azure.

    az login
    
  2. Luego, instale la extensión más reciente de Azure Container Apps para la CLI.

    az extension add --name containerapp --upgrade
    
  3. Si no tiene su propio repositorio de GitHub, cree uno a partir de un ejemplo.

    1. Vaya a la siguiente ubicación para crear un repositorio:
    2. Asigne un nombre al repositorio my-container-app.
  4. Clone el repositorio en la máquina local.

    git clone https://github.com/<YOUR_GITHUB_ACCOUNT_NAME>/my-container-app.git
    

Creación de una aplicación de contenedor con identidad administrada habilitada

Cree la aplicación contenedora con el comando az containerapp up en 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.

Configuración de secretos en el repositorio de GitHub

El flujo de trabajo de GitHub requiere un secreto denominado AZURE_CREDENTIALS para autenticarse con Azure. El secreto contiene las credenciales de una entidad de servicio con el rol Colaborador en el grupo de recursos que contiene la aplicación contenedora y el registro de contenedor.

  1. Cree una entidad de servicio con el rol Colaborador en el grupo de recursos que contiene la aplicación contenedora y el registro de contenedor.

    az ad sp create-for-rbac \
      --name my-app-credentials \
      --role contributor \
      --scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/my-container-app-rg \
      --json-auth \
      --output json
    

    Reemplace <SUBSCRIPTION_ID> por el identificador de la suscripción de Azure. Si el registro de contenedor está en otro grupo de recursos, especifique ambos grupos de recursos en el parámetro --scopes.

  2. Copie la salida JSON desde el comando.

  3. En el repositorio de GitHub, vaya a Configuración>Secretos>Acciones y seleccione Nuevo secreto de repositorio.

  4. Escriba AZURE_CREDENTIALS como nombre y pegue el contenido de la salida JSON como valor.

  5. Seleccione Add secret (Agregar secreto).

Creación de un flujo de trabajo de Acciones de GitHub

  1. En el repositorio de GitHub, vaya a Acciones y seleccione Nuevo flujo de trabajo.

  2. Seleccione Set up a workflow yourself (Configurar un flujo de trabajo personalmente).

  3. Pegue el siguiente YAML en el editor.

    name: Azure Container Apps Deploy
    
    on:
      push:
        branches:
          - main
    
    jobs:
      build:
        runs-on: ubuntu-latest
    
        steps:
          - uses: actions/checkout@v3
    
          - name: Log in to Azure
            uses: azure/login@v1
            with:
              creds: ${{ secrets.AZURE_CREDENTIALS }}
    
          - name: Build and deploy Container App
            uses: azure/container-apps-deploy-action@v1
            with:
              appSourcePath: ${{ github.workspace }}/src
              acrName: <ACR_NAME>
              containerAppName: my-container-app
              resourceGroup: my-container-app-rg
    

    Reemplace <ACR_NAME> por el nombre de Azure Container Registry. Confirme que el nombre de la rama en branches y los valores de appSourcePath, containerAppName y resourceGroup coincidan con los valores del repositorio y los recursos de Azure.

  4. Confirme los cambios en la rama principal.

Una ejecución de flujo de trabajo de Acciones de GitHub debe empezar a compilar e implementar la aplicación contenedora. Para comprobar su progreso, vaya a Acciones.

Para implementar una nueva revisión de la aplicación, inserte una nueva confirmación en la rama principal.