Implantar um aplicativo Fabric com GitHub Actions

Automatize as implantações de um aplicativo Fabric de um repositório GitHub para um workspace Fabric usando um fluxo de trabalho GitHub Actions. O fluxo de trabalho faz login no Fabric com uma entidade de serviço, instala a CLI do Rayfin e executa o rayfin up para aplicar seu código, o esquema do banco de dados e o conteúdo estático ao espaço de trabalho de destino. Este artigo mostra como:

  • Preparar uma entidade de serviço e um workspace do Fabric para implantações automatizadas.
  • Configure os segredos do repositório GitHub que o fluxo de trabalho precisa.
  • Adicione o arquivo de fluxo de trabalho de implantação ao repositório.
  • Acionar implantações automaticamente no main e manualmente, com suporte opcional a alterações destrutivas.
  • Reutilize o mesmo fluxo de trabalho para branches de funcionalidade e implantações específicas para cada ambiente.

Pré-requisitos

  • Um projeto de aplicativo Fabric em um repositório GitHub. Se você ainda não tiver um, consulte Criar seu primeiro projeto Fabric Apps e efetuar push do código do aplicativo para o repositório.
  • Um workspace Fabric no qual a entidade de serviço pode implantar. Para separar ambientes, consulte Gerenciar ambientes de desenvolvimento e produção.
  • Uma entidade de serviço Microsoft Entra ID (registro de aplicativo) com um segredo do cliente.
  • Permissão para adicionar secrets ao repositório GitHub.

Etapa 1: Criar uma entidade de serviço para implantações

O fluxo de trabalho faz login de modo não interativo, portanto usa um principal de serviço em vez de uma conta de usuário interativa.

  1. No portal Azure, registre um novo aplicativo em Microsoft Entra ID>Registros de aplicativo.
  2. Registre a ID do Aplicativo (cliente) e a ID do Diretório (tenant).
  3. Em Certificados &segredos, crie um novo segredo do cliente e copie o valor. Armazene-o com segurança: não é possível exibi-lo novamente mais tarde.
  4. Conceda à entidade de serviço permissão Contributor ou superior no workspace Fabric de destino para que ele possa criar e atualizar o item do aplicativo Fabric.

Importante

As implantações de service principal exigem configurações de locatário do Fabric que permitam que os service principals usem as APIs do Fabric. Confirme com o administrador do Fabric que isso está habilitado.

Etapa 2: Adicionar segredos do repositório

No repositório GitHub, vá para Settings>Secrets e variáveis>Actions e adicione os seguintes segredos do repositório:

Nome do segredo Value
CLIENT_ID A ID do aplicativo (cliente) da entidade de serviço.
TENANT_ID O ID do Diretório (locatário).
CLIENT_SECRET O valor do segredo do cliente.
FABRIC_WORKSPACE_NAME O nome do espaço de trabalho de destino do Fabric (por exemplo, my-app-prod).

Etapa 3: Adicionar o arquivo de fluxo de trabalho

No repositório, crie o arquivo .github/workflows/deploy-to-fabric.yml com o seguinte conteúdo:

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

O que cada seção faz

  • on.push: executa o fluxo de trabalho automaticamente em cada push para main.
  • on.workflow_dispatch: adiciona um botão Run workflow na interface do GitHub Actions com uma caixa de seleção force. Ativar force passa --force para rayfin up, permitindo alterações destrutivas no esquema (como a remoção de colunas ou tabelas). Deixe-o desmarcado para implantações seguras e não destrutivas.
  • concurrency: Garante que apenas uma implantação por ramificação seja executada por vez. Se um novo push ocorrer enquanto um deploy anterior ainda estiver em execução, a execução anterior será cancelada em favor do commit mais recente. Essa configuração impede que duas tarefas rayfin up sejam executadas simultaneamente no mesmo workspace.
  • env: Passa as credenciais da entidade de serviço e o nome do espaço de trabalho de destino ao trabalho.
  • Install Rayfin CLI: Instala a CLI globalmente para que rayfin fique no PATH.
  • Login to Fabric with service principal: autentica usando as variáveis de ambiente *.
  • Deploy to Fabric: executa rayfin up no locatário e no espaço de trabalho configurados. --yes aceita prompts não destrutivos; --force é adicionado somente quando a execução manual o solicitou.

Etapa 4: Acionar uma implantação

Você pode disparar o fluxo de trabalho de duas maneiras:

  • Automaticamente: envie ou mescle um commit no ramo main.
  • Manualmente: no GitHub, acesse Actions>Implantar no Fabric>Executar fluxo de trabalho. Selecione a ramificação a ser implantada e, opcionalmente, marque Permitir alterações destrutivas no esquema que podem resultar em perda de dados antes de iniciar a execução.

Após a conclusão do fluxo de trabalho, a etapa Deploy para Fabric no log de execução imprime a URL do aplicativo Fabric e a ID da implantação.

Considerações e limitações

  • A concorrência é por branch. O concurrency.group inclui github.ref, portanto, implantações em branches diferentes não cancelam umas às outras. Esse comportamento é intencional quando você mapeia ramificações em espaços de trabalho diferentes.
  • As alterações destrutivas são bloqueadas por padrão. rayfin up recusa operações de esquema que podem perder dados, a menos que sejam passadas --force . Ative force apenas em uma execução manual depois de revisar as operações planejadas.
  • Os espaços de trabalho devem existir. O fluxo de trabalho não cria espaços de trabalho do Fabric. Crie-os no portal do Fabric e primeiro conceda acesso à entidade de serviço.