Automação de projetos SQL

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada SQL do Azure

Este artigo apresenta uma visão geral das opções de automação para projetos SQL em diferentes plataformas de entrega de software. Use a automação para integrar projetos de bases de dados SQL em pipelines CI/CD e implemente alterações na base de dados de forma consistente e repetida.

O que automatizar

A automação de projetos SQL envolve tipicamente duas tarefas-chave num pipeline CI/CD:

  • Constrói o projeto SQL: Valida o projeto e produz o artefacto de implementação (.dacpac) executando dotnet build no projeto de base de dados SQL para compilar. Opcionalmente, execute regras de análise de código para verificar a qualidade do código durante a construção do projeto.

  • Implemente o .dacpac: Publique para .dacpac uma base de dados alvo usando SqlPackage ou uma tarefa específica da plataforma. A implementação pode direcionar Azure SQL Database, Azure SQL Managed Instance, SQL Server ou base de dados SQL no Fabric.

Diagrama que mostra o fluxo desde a construção do projeto SQL até ao artefacto dacpac e a implementação numa base de dados.

Quando integra estes passos no seu pipeline de CI/CD, as alterações na base de dados são validadas em cada commit e implementadas de forma consistente entre os ambientes.

Conceitos comuns

Fluxo de artefactos: Um pipeline típico separa as fases de construção e implantação. A fase de compilação compila o projeto SQL e produz um .dacpac ficheiro, que é depois publicado como um artefacto de pipeline. Num trabalho de implementação subsequente (potencialmente após aprovação manual), o artefacto é descarregado e implementado na base de dados alvo. Esta separação permite construir uma vez e implementar o mesmo artefacto em múltiplos ambientes, garantindo consistência.

Publicar ou scriptar: Antes de implementar em ambientes sensíveis, pode rever o plano de implementação. O SqlPackage suporta uma Script ação que gera o script T-SQL que seria executado durante a implementação, sem aplicar alterações. O script T-SQL fornecido permite que administradores ou revisores de bases de dados examinem as alterações exatas necessárias para aplicar a aprovação .dacpac prévia. De forma semelhante, a DeployReport ação produz um relatório XML das alterações planeadas.

Aprovações de ambiente e limites: As implementações em produção normalmente exigem fluxos de trabalho de aprovação para evitar alterações não intencionais. Tanto o GitHub Actions como o Azure DevOps suportam aprovações baseadas no ambiente. No GitHub, podes configurar ambientes com revisores e temporizadores de espera necessários. No Azure DevOps, os ambientes suportam portas de aprovação, restrições de horário de funcionamento e outros controlos de implementação. Estes controlos ajudam a garantir que as alterações à base de dados são revistas e aprovadas antes de chegarem à produção.

Pré-requisitos

O SqlPackage é multiplataforma e funciona no Windows, Linux e macOS. Instale-o como uma ferramenta .NET global para garantir um comportamento consistente em todos os ambientes.

  • .NET SDK instalado no agente de compilação.

  • SqlPackage instalado no agente de compilação. Pode instalar o SqlPackage como uma ferramenta global .NET:

    dotnet tool install --global microsoft.sqlpackage
    

Plataformas de entrega de software

Escolha um ambiente que corresponda aos requisitos de ferramentas, conformidade e conectividade da sua equipa.

Ambientes virtuais gerenciados

Ambientes virtuais geridos pela Microsoft para GitHub Actions, runners alojados e agentes Azure Pipelines incluem ferramentas pré-instaladas:

Meio Ambiente SDK para .NET SqlPackage
Windows Preinstalled Preinstalled
Linux Preinstalled Não pré-instalado
macOS Preinstalled Não pré-instalado

Em ambientes Linux e macOS, instala o SqlPackage como parte do teu fluxo de trabalho. Para mais informações sobre a instalação e versionamento do SqlPackage em pipelines, consulte SqlPackage em pipelines de desenvolvimento.

Ambientes auto-hospedados

Implemente a partir de um runner ou agente auto-hospedado quando precisar de mais controlo sobre o ambiente, tais como:

  • Requisitos de isolamento de rede (aceder a bases de dados não expostas à internet pública)
  • Ferramentas personalizadas ou versões específicas do SqlPackage
  • Políticas de conformidade ou segurança

Pode implementar runners auto-hospedados como jobs Azure Container Apps para execução orientada a eventos e serverless. Use esta abordagem para definir o ambiente num Dockerfile e instalar o SqlPackage e outras ferramentas conforme necessário.

GitHub Actions

A ação Azure SQL Deploy (azure/sql-action) proporciona uma experiência integrada para implementar projetos e .dacpac ficheiros SQL para Azure SQL e SQL Server a partir de qualquer executor de GitHub Actions.

Principais capacidades:

  • Implementa .dacpac, .sqlproj, ou .sql scripts.
  • Suporta autenticação SQL, autenticação Microsoft Entra ID e autenticação principal de serviço.
  • Adiciona e remove automaticamente regras temporárias de firewall para Azure SQL Database quando combinado com azure/login.
  • Funciona tanto em Windows como em Linux.

Exemplo: Implementar um projeto SQL com ações no GitHub

# .github/workflows/sql-deploy.yml
on: [push]

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4

    - uses: azure/sql-action@v2
      with:
        connection-string: ${{ secrets.AZURE_SQL_CONNECTION_STRING }}
        path: './Database.sqlproj'
        action: 'publish'

Para implementações Azure SQL Database que exijam uma regra temporária de firewall, adicione o azure/login passo antes sql-actionde :

    - uses: azure/login@v2
      with:
        creds: ${{ secrets.AZURE_CREDENTIALS }}

    - uses: azure/sql-action@v2
      with:
        connection-string: ${{ secrets.AZURE_SQL_CONNECTION_STRING }}
        path: './Database.dacpac'
        action: 'publish'

Também podes usar o SqlPackage diretamente em qualquer runner. Para mais informações, consulte SqlPackage em pipelines de desenvolvimento.

Azure Pipelines (Pipelines do Azure)

O Azure DevOps fornece a tarefa SqlAzureDacpacDeployment para distribuir .dacpac ficheiros e scripts SQL no Azure SQL Database.

Principais capacidades:

  • Implementa .dacpac ficheiros ou executa scripts SQL.
  • Suporta autenticação SQL, autenticação Microsoft Entra ID e autenticação principal de serviço.
  • Gerem automaticamente as regras de firewall para a Azure SQL Database.
  • Requer um agente Windows (usa o SqlPackage diretamente nos agentes Linux).

Exemplo: Implementar a .dacpac com Azure DevOps

# azure-pipelines.yml
trigger:
  - main

pool:
  vmImage: 'windows-latest'

steps:
- task: SqlAzureDacpacDeployment@1
  inputs:
    azureSubscription: 'your-service-connection'
    AuthenticationType: 'server'
    ServerName: 'your-server.database.windows.net'
    DatabaseName: 'your-database'
    SqlUsername: '$(SqlUser)'
    SqlPassword: '$(SqlPassword)'
    deployType: 'DacpacTask'
    DeploymentAction: 'Publish'
    DacpacFile: '$(Build.ArtifactStagingDirectory)/Database.dacpac'

Para agentes Linux ou maior controlo sobre o processo de implementação, use o SqlPackage diretamente:

steps:
- task: UseDotNet@2
  inputs:
    packageType: 'sdk'
    version: '8.x'

- script: dotnet tool install --global microsoft.sqlpackage
  displayName: 'Install SqlPackage'

- script: |
    sqlpackage /Action:Publish \
      /SourceFile:$(Build.ArtifactStagingDirectory)/Database.dacpac \
      /TargetConnectionString:"$(ConnectionString)"
  displayName: 'Deploy database'

Outras plataformas CI/CD

Para plataformas como GitLab CI/CD, Jenkins, CircleCI ou outras, use o SqlPackage diretamente para construir e implementar projetos SQL.

Compilar o projeto

dotnet build ./Database.sqlproj -c Release

Implante o .dacpac

sqlpackage /Action:Publish \
  /SourceFile:./bin/Release/Database.dacpac \
  /TargetConnectionString:"Server=your-server;Database=your-db;User Id=user;Password=password;"