Implemente uma aplicação Fabric com GitHub Actions

Automatize as implementações de uma aplicação Fabric de um repositório GitHub para um espaço de trabalho Fabric usando um fluxo de trabalho GitHub Actions. O fluxo de trabalho inicia sessão no Fabric com uma identidade de serviço, instala a CLI Rayfin e executa rayfin up para aplicar o seu código, o esquema de base de dados e o conteúdo estático ao espaço de trabalho de destino. Este artigo mostra-lhe como:

  • Prepare um principal de serviço e um espaço de trabalho Fabric para implementações automatizadas.
  • Configura os segredos do repositório do GitHub que o fluxo de trabalho precisa.
  • Adicione o ficheiro do fluxo de trabalho de implementação ao seu repositório.
  • Acione as implementações automaticamente em main e manualmente, com suporte opcional para alterações destrutivas.
  • Reutilize o mesmo fluxo de trabalho para ramos de funcionalidades e implementações específicas do ambiente.

Pré-requisitos

  • Um projeto de aplicação Fabric num repositório do GitHub. Se ainda não tens um, vê Cria o teu primeiro projeto Fabric Apps e envia o código da tua aplicação para o repositório.
  • Um espaço de trabalho do Fabric para o qual a entidade de serviço pode implementar. Para separação de ambientes, veja Gerir ambientes de desenvolvimento e produção.
  • Um principal de serviço Microsoft Entra ID (registo de aplicações) com um cliente secreto.
  • Permissão para adicionar secrets ao repositório GitHub.

Passo 1: Criar um principal de serviço para implementações

O fluxo de trabalho inicia sessão de forma não interativa, por isso usa um principal de serviço em vez de uma conta de utilizador interativa.

  1. No portal Azure, regista uma nova candidatura sob Microsoft Entra ID>Registos de aplicações.
  2. Regista o ID da Aplicação (cliente) e o ID do Diretório (inquilino).
  3. Em Certificados & segredos, crie um novo segredo de cliente e copie o valor. Guarde-a de forma segura: não poderá vê-la novamente mais tarde.
  4. Conceda ao principal de serviço a permissão Contribuidor ou superior no espaço de trabalho do Fabric de destino para que possa criar e atualizar o item de aplicação do Fabric.

Importante

As implementações de principal de serviço exigem definições de tenant Fabric que permitam aos principais de serviço utilizar APIs Fabric. Confirma com o teu administrador do Fabric que isto está ativado.

Passo 2: Adicionar segredos do repositório

No seu repositório GitHub, vá a Settings>Secrets and variables>Actions e adicione os seguintes segredos do repositório:

Nome secreto Value
CLIENT_ID O ID da Aplicação (cliente) do principal do serviço.
TENANT_ID O ID do Diretório (inquilino).
CLIENT_SECRET O valor secreto do cliente.
FABRIC_WORKSPACE_NAME O nome do espaço de trabalho do Fabric de destino (por exemplo, my-app-prod).

Passo 3: Adicionar o ficheiro do fluxo de trabalho

No seu repositório, crie o ficheiro .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 secção faz

  • on.push: Executa o fluxo de trabalho automaticamente a cada push para main.
  • on.workflow_dispatch: Adiciona um botão Executar workflow na interface GitHub Actions com uma caixa de seleção force. Ativar force passa --force para rayfin up, permitindo alterações destrutivas ao esquema (como eliminar colunas ou tabelas). Deixe-o sem controlo para implantações seguras e não destrutivas.
  • concurrency: Garante que apenas uma implementação por ramo seja executada de cada vez. Se ocorrer um novo push enquanto uma implementação anterior ainda estiver em execução, a execução anterior é cancelada em favor do commit mais recente. Esta configuração impede que duas tarefas rayfin up entrem em conflito no mesmo espaço de trabalho.
  • env: Passa as credenciais do service principal e o nome do espaço de trabalho de destino para a tarefa.
  • Install Rayfin CLI: Instala a CLI globalmente, por isso rayfin está no PATH.
  • Login to Fabric with service principal: Autentica usando as variáveis de ambiente *.
  • Deploy to Fabric: Executa rayfin up no inquilino e na área de trabalho configurados. --yes aceita prompts não destrutivos; --force só é adicionado quando a execução manual o tiver solicitado.

Passo 4: Desencadear uma implantação

Pode ativar o fluxo de trabalho de duas formas:

  • Automaticamente: Empurrar ou juntar um commit para o main branch.
  • Manualmente: No GitHub, aceda a Actions>Implementar no Fabric>Executar fluxo de trabalho. Selecione o ramo a implementar e, opcionalmente, assinale Permitir alterações destrutivas ao esquema que possam resultar em perda de dados antes de iniciar a execução.

Após o fim do fluxo de trabalho, a etapa Deploy to Fabric no registo de execução imprime o URL da aplicação Fabric e o ID de implementação.

Considerações e limitações

  • A concorrência é por ramo. O concurrency.group inclui github.ref, pelo que as implementações em diferentes ramificações não se cancelam entre si. Este comportamento é intencional quando se mapeiam ramificações para diferentes espaços de trabalho.
  • As alterações destrutivas são bloqueadas por predefinição. rayfin up Recusa operações de esquema que podem perder dados a menos que --force sejam ultrapassadas. Ative force apenas numa execução manual quando tiver revisto as operações planeadas.
  • Devem existir espaços de trabalho. O fluxo de trabalho não cria espaços de trabalho Fabric. Crie-os no portal Fabric e conceda primeiro o acesso ao principal do serviço.