Implementación de una aplicación de Fabric con Acciones de GitHub

Automatice las implementaciones de una aplicación de Fabric desde un repositorio de GitHub a un área de trabajo de Fabric mediante un flujo de trabajo de Acciones de GitHub. El flujo de trabajo inicia sesión en Fabric con una entidad de servicio, instala la CLI de Rayfin y ejecuta rayfin up para aplicar el código, el esquema de base de datos y el contenido estático al área de trabajo de destino. En este artículo aprenderá a:

  • Prepare una entidad de servicio y un área de trabajo de Fabric para implementaciones automatizadas.
  • Configure los secretos del repositorio de GitHub que necesita el flujo de trabajo.
  • Agregue el archivo de flujo de trabajo de implementación al repositorio.
  • Active los despliegues automáticamente en main y manualmente con soporte opcional para cambios destructivos.
  • Reutilice el mismo flujo de trabajo para las ramas de funcionalidad y los despliegues específicos de cada entorno.

Prerequisites

  • Un proyecto de aplicación Fabric en un repositorio de GitHub. Si aún no tiene una, consulte Crear el primer proyecto de Fabric Apps e insertar el código de la aplicación en el repositorio.
  • Área de trabajo de Fabric en la que la entidad de servicio puede implementar. Para la separación de entornos, consulte Gestionar entornos de desarrollo y producción.
  • Una entidad de servicio Microsoft Entra ID (registro de aplicaciones) con un secreto de cliente.
  • Permiso para agregar secrets al repositorio de GitHub.

Paso 1: Cree una entidad de servicio para los despliegues

El flujo de trabajo se autentica de forma no interactiva, por lo que usa un principal de servicio en lugar de una cuenta de usuario interactiva.

  1. En el portal Azure, registre una nueva aplicación en Microsoft Entra ID>Registros de aplicaciones.
  2. Registre el identificador de aplicación (cliente) y el identificador de directorio (inquilino).
  3. En Certificados y secretos, cree un nuevo secreto de cliente y copie el valor. Almacenarlo de forma segura: no se puede volver a ver más tarde.
  4. Conceda a la entidad de servicio Contributor o un permiso superior en el área de trabajo de Fabric de destino para que pueda crear y actualizar el elemento de aplicación de Fabric.

Importante

Las implementaciones con entidades de servicio requieren la configuración del inquilino de Fabric que permite a las entidades de servicio usar las API de Fabric. Confirme con el administrador de Fabric que está habilitado.

Paso 2: Adición de secretos de repositorio

En el repositorio de GitHub, vaya a Settings>Secrets y variables>Actions y agregue los siguientes secretos de repositorio:

Nombre del secreto Valor
CLIENT_ID El identificador de aplicación (cliente) de la entidad de servicio.
TENANT_ID El identificador del directorio (inquilino).
CLIENT_SECRET Valor del secreto del cliente.
FABRIC_WORKSPACE_NAME Nombre del área de trabajo de Fabric de destino (por ejemplo, my-app-prod).

Paso 3: Agregar el archivo de flujo de trabajo

En el repositorio, cree el archivo .github/workflows/deploy-to-fabric.yml con el siguiente contenido:

name: Deploy to Fabric

on:
  push:
    branches: [main]
  workflow_dispatch:
    inputs:
      force:
        description: 'Allow destructive schema changes that may result in data loss'
        required: false
        default: false
        type: boolean

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

permissions:
  contents: read

jobs:
  deploy:
    name: Deploy to Fabric
    runs-on: ubuntu-latest
    env:
      CLIENT_ID: ${{ secrets.CLIENT_ID }}
      TENANT_ID: ${{ secrets.TENANT_ID }}
      CLIENT_SECRET: ${{ secrets.CLIENT_SECRET }}
      FABRIC_WORKSPACE_NAME: ${{ secrets.FABRIC_WORKSPACE_NAME }}

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'

      - name: Install Rayfin CLI
        run: npm install -g @microsoft/rayfin-cli

      - name: Login to Rayfin with service principal
        run: |
          rayfin login \
            --service-principal \
            -t $TENANT_ID
            -u $CLIENT_ID
            -p CLIENT_SECRET

      - name: Deploy to Fabric
        run: |
          EXTRA_ARGS=""

          if [[ "${{ inputs.force }}" == "true" ]]; then
            EXTRA_ARGS="$EXTRA_ARGS --force"
          fi

          rayfin up \
            --workspace "$FABRIC_WORKSPACE_NAME" \
            --yes \
            $EXTRA_ARGS

Qué hace cada sección

  • on.push: Ejecuta automáticamente el flujo de trabajo con cada push a main.
  • on.workflow_dispatch: agrega un botón Ejecutar flujo de trabajo en la interfaz de usuario de Acciones de GitHub con una casilla de verificación forzar. Al habilitar force, se pasa --force a rayfin up para permitir cambios destructivos en el esquema (como eliminar columnas o tablas). Déjelo desactivado para implementaciones seguras y no destructivas.
  • concurrency: garantiza que solo se ejecuta una implementación por rama a la vez. Si se produce un nuevo push mientras un despliegue anterior todavía se está ejecutando, la ejecución anterior se cancela en favor del commit más reciente. Esta configuración impide que dos trabajos rayfin up se ejecuten simultáneamente en la misma área de trabajo.
  • env: pasa las credenciales de la entidad de servicio y el nombre del área de trabajo de destino al trabajo.
  • Install Rayfin CLI: instala la CLI globalmente, por lo que rayfin está en path.
  • Login to Fabric with service principal: se autentica mediante las variables de entorno *.
  • Deploy to Fabric: ejecuta rayfin up con el inquilino y el espacio de trabajo configurados. --yes acepta indicaciones no destructivas; --force solo se agrega cuando la ejecución manual la solicitó.

Paso 4: Desencadenar una implementación

Puede desencadenar el flujo de trabajo de dos maneras:

  • Automáticamente: envíe o fusione una confirmación de cambios en la rama main.
  • Manually: En GitHub, vaya a Actions>Deploy to Fabric>Run workflow. Seleccione la rama que desea desplegar y, opcionalmente, marque Permitir cambios destructivos en el esquema que puedan provocar pérdida de datos antes de iniciar la ejecución.

Una vez finalizado el flujo de trabajo, el paso Deploy en Fabric del registro de ejecución imprime la dirección URL de la aplicación de Fabric y el identificador de implementación.

Consideraciones y limitaciones

  • La concurrencia se aplica por rama. concurrency.group incluye github.ref, por lo que las implementaciones en diferentes ramas no se cancelan entre sí. Este comportamiento es intencionado al asignar ramas a diferentes áreas de trabajo.
  • Los cambios destructivos se bloquean de forma predeterminada. rayfin up rechaza las operaciones sobre el esquema que pueden provocar pérdida de datos, a menos que se proporcione --force. Active solo force en una ejecución manual cuando haya revisado las operaciones planificadas.
  • Las áreas de trabajo deben existir. El flujo de trabajo no crea áreas de trabajo de Fabric. Créelos en el portal de Fabric y conceda primero el acceso a la entidad de servicio.