Configuración de un flujo de trabajo de acciones de GitHub para implementar el sitio web estático en Azure Storage
Aprenda a usar las Acciones de GitHub mediante un flujo de trabajo para implementar un sitio estático en una cuenta de Azure Storage. Una vez que haya configurado el flujo de trabajo de acciones de GitHub, podrá implementar automáticamente el sitio en Azure desde GitHub cuando realice cambios en el código del sitio.
Nota:
Si usa Azure Static Web Apps, no es necesario configurar manualmente un flujo de trabajo de acciones de GitHub. Azure Static Web Apps crea automáticamente un flujo de trabajo de Acciones de GitHub.
Requisitos previos
Una cuenta de GitHub y una suscripción de Azure.
- Una cuenta de Azure con una suscripción activa. Cree una cuenta gratuita.
- Un repositorio de GitHub con el código del sitio web estático. Si no tiene una cuenta de GitHub, regístrese para obtener una gratis.
- Un sitio web estático en funcionamiento hospedado en Azure Storage. Aprenda a administrar el hospedaje de sitios web estáticos en Azure Storage. Para seguir este ejemplo, también debe implementar Azure CDN.
Nota:
Normalmente se usa una red de entrega de contenido (CDN) para reducir la latencia a los usuarios de todo el mundo, así como reducir el número de transacciones a su cuenta de almacenamiento. La implementación de contenido estático en un servicio de almacenamiento basado en la nube puede reducir la necesidad de una instancia de proceso potencialmente costosa. Para obtener más información, consulte Patrón Static Content Hosting.
Genere las credenciales de implementación.
Para utilizar la acción de inicio de sesión de Azure con OIDC, es necesario configurar una credencial de identidad federada en una aplicación Microsoft Entra o una identidad administrada asignada por el usuario.
Opción 1: aplicaciones de Microsoft Entra
- Cree una aplicación de Microsoft Entra con una entidad de servicio mediante Azure Portal, la CLI de Azure o Azure PowerShell.
- Copie los valores de Id. de cliente, Id. de suscripción e Id. de directorio (inquilino) para usarlos más adelante en el flujo de trabajo de Acciones de GitHub.
- Asigne un rol adecuado a la entidad de servicio con Azure Portal, la CLI de Azureo Azure PowerShell.
- Configurar una credencial de identidad federada en una aplicación de Microsoft Entra para confiar en tokens emitidos por Acciones de GitHub en el repositorio de GitHub.
Opción 2: identidad administrada asignada por el usuario
- Creación de una identidad administrada asignada por el usuario.
- Copie los valores de Id. de cliente, Id. de suscripción e Id. de directorio (inquilino) para usarlos más adelante en el flujo de trabajo de Acciones de GitHub.
- Asigne un rol apropiado a la identidad administrada asignada por el usuario.
- Configurar una credencial de identidad federada en una identidad administrada asignada por el usuario para confiar en los tokens emitidos por Acciones de GitHub en el repositorio de GitHub.
Configuración de secretos de GitHub
Debe proporcionar el d. de cliente de su aplicación, el id. de directorio (inquilino) y el id. de suscripción a la acción de inicio de sesión. Estos valores se pueden proporcionar directamente en el flujo de trabajo o se pueden almacenar en secretos de GitHub y se puede hacer referencia a ellos en el flujo de trabajo. Guardar los valores como secretos de GitHub es la opción más segura.
En GitHub, vaya al repositorio.
Seleccione Seguridad > Secretos y variables > Acciones.
Seleccione New repository secret (Nuevo secreto del repositorio).
Nota:
Para mejorar la seguridad del flujo de trabajo en repositorios públicos, use secretos de entorno en lugar de secretos de repositorio. Si el ambiente requiere aprobación, un job no puede acceder a secretos de ambiente hasta que uno de los revisores requeridos lo apruebe.
Cree secretos para
AZURE_CLIENT_ID
,AZURE_TENANT_ID
yAZURE_SUBSCRIPTION_ID
. Copie estos valores de la aplicación de Microsoft Entra o identidad administrada asignada por el usuario para los secretos de GitHub:Secreto de GitHub Aplicación de Microsoft Entra o identidad administrada asignada por el usuario AZURE_CLIENT_ID Id. de cliente AZURE_SUBSCRIPTION_ID Id. de suscripción AZURE_TENANT_ID Id. de directorio (inquilino) Nota:
Por motivos de seguridad, se recomienda usar secretos de GitHub en lugar de pasar valores directamente al flujo de trabajo.
Agregar el flujo de trabajo
Vaya a Acciones del repositorio de GitHub.
Seleccione Set up your workflow yourself (Configure el flujo de trabajo usted mismo).
Elimine todo lo que aparezca después de la sección
on:
del archivo de flujo de trabajo. Por ejemplo, el flujo de trabajo restante puede tener el siguiente aspecto.name: CI with OpenID Connect on: push: branches: [ main ]
Agregue una sección de permisos.
name: CI with OpenID Connect on: push: branches: [ main ] permissions: id-token: write contents: read
Agregue acciones de restauración e inicio de sesión. Estas acciones comprobarán el código de sitio y se autenticarán con Azure mediante los secretos de GitHub que creó anteriormente.
name: CI with OpenID Connect on: push: branches: [ main ] permissions: id-token: write contents: read jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: azure/login@v2 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
Use la acción de la CLI de Azure para cargar el código en la instancia de Blob Storage y purgar el punto de conexión de la red CDN. En cuanto a
az storage blob upload-batch
, reemplace el marcador de posición por el nombre de la cuenta de almacenamiento. El script se cargará en el contenedor$web
. Paraaz cdn endpoint purge
, reemplace los marcadores de posición por el nombre del perfil de CDN, el nombre del punto de conexión de CDN y el grupo de recursos. Para acelerar la purga de la red CDN, puede agregar la opción--no-wait
aaz cdn endpoint purge
. Para mejorar la seguridad, también puede agregar la opción--account-key
con la clave de la cuenta de almacenamiento.- name: Upload to blob storage uses: azure/CLI@v1 with: inlineScript: | az storage blob upload-batch --account-name <STORAGE_ACCOUNT_NAME> --auth-mode key -d '$web' -s . - name: Purge CDN endpoint uses: azure/CLI@v1 with: inlineScript: | az cdn endpoint purge --content-paths "/*" --profile-name "CDN_PROFILE_NAME" --name "CDN_ENDPOINT" --resource-group "RESOURCE_GROUP"
Complete el flujo de trabajo agregando una acción al cierre de sesión de Azure. Este es el flujo de trabajo completado. El archivo aparecerá en la carpeta
.github/workflows
del repositorio.name: CI with OpenID Connect on: push: branches: [ main ] permissions: id-token: write contents: read jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: azure/login@v2 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - name: Upload to blob storage uses: azure/CLI@v1 with: inlineScript: | az storage blob upload-batch --account-name <STORAGE_ACCOUNT_NAME> --auth-mode key -d '$web' -s . - name: Purge CDN endpoint uses: azure/CLI@v1 with: inlineScript: | az cdn endpoint purge --content-paths "/*" --profile-name "CDN_PROFILE_NAME" --name "CDN_ENDPOINT" --resource-group "RESOURCE_GROUP" # Azure logout - name: logout run: | az logout if: always()
Revisar la implementación
Vaya a la opción de Acciones del repositorio de GitHub.
Abra el primer resultado para ver los registros detallados de la ejecución del flujo de trabajo.
Limpieza de recursos
Cuando el repositorio de GitHub y el sitio estático ya no sean necesarios, limpie los recursos que implementó eliminando el grupo de recursos y el repositorio de GitHub.