Automatizace projektů SQL

platí pro: SQL Server Azure SQL DatabaseAzure SQL Managed Instance

Tento článek obsahuje přehled možností automatizace pro projekty SQL na různých platformách pro doručování softwaru. Pomocí automatizace můžete integrovat projekty databáze SQL do kanálů CI/CD a opakovaně nasazovat změny databáze.

Co automatizovat

Automatizace projektů SQL obvykle zahrnuje dva klíčové úlohy v kanálu CI/CD:

  • Sestavení projektu SQL: Ověřte projekt a vytvořte artefakt nasazení (.dacpac) spuštěním dotnet build v projektu databáze SQL ke kompilaci. Volitelně můžete spouštět pravidla analýzy kódu , která kontrolují kvalitu kódu během sestavování projektu.

  • Nasaďte : .dacpacPublikování.dacpac do cílové databáze pomocí SqlPackage nebo úlohy specifické pro platformu. Nasazení může cílit na Službu Azure SQL Database, spravovanou instanci Azure SQL, SQL Server nebo databázi SQL v prostředcích infrastruktury.

Diagram znázorňující tok z sestavení projektu SQL do artefaktu dacpac a nasazení do databáze

Když tyto kroky integrujete do kanálu CI/CD, změny databáze se ověřují při každém potvrzení a nasazují se konzistentně napříč prostředími.

Běžné pojmy

Tok artefaktů: Typický kanál odděluje fáze sestavení a nasazení. Fáze sestavení zkompiluje projekt SQL a vytvoří .dacpac soubor, který se pak publikuje jako artefakt kanálu. V následné úloze nasazení (potenciálně po ručním schválení) se artefakt stáhne a nasadí do cílové databáze. Toto oddělení umožňuje sestavit jeden a nasadit stejný artefakt do více prostředí a zajistit tak konzistenci.

Publikování nebo skript: Před nasazením do citlivých prostředí můžete zkontrolovat plán nasazení. SqlPackage podporuje Script akci, která vygeneruje skript T-SQL, který by se spustil během nasazení bez použití změn. Zadaný skript T-SQL umožňuje správcům databáze nebo revidujícím zkoumat přesné změny potřebné k použití před schválením .dacpac . Podobně akce DeployReport vytvoří sestavu XML plánovaných změn.

Schválení a brány prostředí: Produkční nasazení obvykle vyžadují pracovní postupy schválení, aby se zabránilo nezamýšleným změnám. GitHub Actions i Azure DevOps podporují schvalování na základě prostředí. Na GitHubu můžete nakonfigurovat prostředí s požadovanými kontrolory a časovači čekání. Prostředí v Azure DevOps podporují schvalovací brány, omezení pracovních hodin a další ovládací prvky nasazení. Tyto ovládací prvky pomáhají zajistit, aby se změny databáze před dosažením produkčního prostředí kontrolovaly a schválily.

Požadavky

SqlPackage je multiplatformní a běží ve Windows, Linuxu a macOS. Nainstalujte ho jako globální nástroj .NET, abyste zajistili konzistentní chování napříč prostředími.

  • Sada .NET SDK nainstalovaná v agentu sestavení

  • SqlPackage nainstalovaný v agentu sestavení. SqlPackage můžete nainstalovat jako globální nástroj .NET:

    dotnet tool install --global microsoft.sqlpackage
    

Platformy pro doručování softwaru

Zvolte prostředí, které odpovídá požadavkům vašeho týmu na nástroje, dodržování předpisů a možnosti připojení.

Spravovaná virtuální prostředí

Virtuální prostředí spravovaná Microsoftem pro spouštěče hostované službou GitHub Actions a agenty Azure Pipelines zahrnují předinstalované nástroje:

Životní prostředí .NET SDK SqlPackage
Windows Preinstalled Preinstalled
Linux Preinstalled Není předinstalováno
macOS Preinstalled Není předinstalováno

V prostředích s Linuxem a macOS nainstalujte SqlPackage jako součást pracovního postupu. Další informace o instalaci a správě verzí SqlPackage v kanálech najdete v tématu SqlPackage ve vývojových kanálech.

Místní prostředí

Nasazení z místního spouštěče nebo agenta, pokud potřebujete větší kontrolu nad prostředím, například:

  • Požadavky na izolaci sítě (přístup k databázím, které nejsou vystaveny veřejnému internetu)
  • Vlastní nástroje nebo konkrétní verze SqlPackage
  • Zásady dodržování předpisů nebo zabezpečení

Spouštěče v místním prostředí můžete nasadit jako úlohy Azure Container Apps pro spouštění bez serveru řízené událostmi. Tento přístup použijte k definování prostředí v souboru Dockerfile a instalaci SqlPackage a dalších nástrojů podle potřeby.

GitHub Actions

Akce Nasazení Azure SQL (azure/sql-action) poskytuje integrované prostředí pro nasazování projektů a .dacpac souborů SQL do Azure SQL a SQL Serveru z libovolného spouštěče GitHub Actions.

Klíčové funkce:

  • Nasadí .dacpacnebo .sqlproj.sql skripty.
  • Podporuje ověřování SQL, ověřování Microsoft Entra ID a ověřování instančního objektu.
  • Automaticky přidá a odebere dočasná pravidla brány firewall pro službu Azure SQL Database v kombinaci s azure/login.
  • Funguje na spouštěčích Pro Windows i Linux.

Příklad: Nasazení projektu SQL pomocí GitHub Actions

# .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'

Pro nasazení služby Azure SQL Database, která vyžadují dočasné pravidlo brány firewall, přidejte azure/login tento krok před sql-action:

    - 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'

SqlPackage můžete také použít přímo na libovolném spouštěči. Další informace najdete v tématu SqlPackage ve vývojových kanálech.

Azure Pipelines

Azure DevOps poskytuje úlohu SqlAzureDacpacDeployment pro nasazování .dacpac souborů a skriptů SQL do služby Azure SQL Database.

Klíčové funkce:

  • Nasadí .dacpac soubory nebo spustí skripty SQL.
  • Podporuje ověřování SQL, ověřování Microsoft Entra ID a ověřování instančního objektu.
  • Automaticky spravuje pravidla brány firewall pro službu Azure SQL Database.
  • Vyžaduje agenta systému Windows (použijte SqlPackage přímo na agentech Linuxu).

Příklad: Nasazení s .dacpac využitím 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'

Pro agenty Linuxu nebo větší kontrolu nad procesem nasazení použijte SqlPackage přímo:

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'

Další platformy CI/CD

Pro platformy, jako je CI/CD GitLab, Jenkins, CircleCI nebo jiné, použijte SqlPackage přímo k sestavování a nasazování projektů SQL.

Sestavení projektu

dotnet build ./Database.sqlproj -c Release

Nasadit .dacpac

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