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.
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.
Inicio de sesión en Azure con la CLI de Azure.
az login
Luego, instale la extensión más reciente de Azure Container Apps para la CLI.
az extension add --name containerapp --upgrade
Si no tiene su propio repositorio de GitHub, cree uno a partir de un ejemplo.
- Vaya a la siguiente ubicación para crear un repositorio:
- Asigne un nombre al repositorio
my-container-app
.
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.
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.
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.
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
.Copie la salida JSON desde el comando.
En el repositorio de GitHub, vaya a Configuración>Secretos>Acciones y seleccione Nuevo secreto de repositorio.
Escriba
AZURE_CREDENTIALS
como nombre y pegue el contenido de la salida JSON como valor.Seleccione Add secret (Agregar secreto).
Creación de un flujo de trabajo de Acciones de GitHub
En el repositorio de GitHub, vaya a Acciones y seleccione Nuevo flujo de trabajo.
Seleccione Set up a workflow yourself (Configurar un flujo de trabajo personalmente).
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 enbranches
y los valores deappSourcePath
,containerAppName
yresourceGroup
coincidan con los valores del repositorio y los recursos de Azure.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.