Automatyzacja projektów SQL

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Ten artykuł zawiera omówienie opcji automatyzacji dla projektów SQL na różnych platformach dostarczania oprogramowania. Użyj automatyzacji, aby zintegrować projekty bazy danych SQL z potokami ciągłej integracji/ciągłego wdrażania i wdrażać zmiany bazy danych spójnie i wielokrotnie.

Co zautomatyzować

Automatyzacja projektów SQL zwykle obejmuje dwa kluczowe zadania w potoku ciągłej integracji/ciągłego wdrażania:

  • Skompiluj projekt SQL: zweryfikuj projekt i utwórz artefakt wdrożenia (.dacpac), uruchamiając dotnet build polecenie w projekcie bazy danych SQL w celu skompilowania. Opcjonalnie wykonaj reguły analizy kodu, aby sprawdzić jakość kodu podczas kompilacji projektu.

  • Wdróż element .dacpac: Opublikuj element w .dacpac docelowej bazie danych przy użyciu pakietu SqlPackage lub zadania specyficznego dla platformy. Wdrożenie może być przeznaczone dla usług Azure SQL Database, Azure SQL Managed Instance, SQL Server lub SQL Database w sieci szkieletowej.

Diagram przedstawiający przepływ z kompilacji projektu SQL do artefaktu dacpac i wdrożenia w bazie danych.

Po zintegrowaniu tych kroków z potokiem ciągłej integracji/ciągłego wdrażania zmiany bazy danych są weryfikowane dla każdego zatwierdzenia i wdrażane spójnie w różnych środowiskach.

Typowe pojęcia

Przepływ artefaktu: typowy potok oddziela etapy kompilacji i wdrażania. Etap kompilacji kompiluje projekt SQL i tworzy .dacpac plik, który jest następnie publikowany jako artefakt potoku. W kolejnym zadaniu wdrażania (potencjalnie po ręcznym zatwierdzeniu) artefakt jest pobierany i wdrażany w docelowej bazie danych. Ta separacja umożliwia tworzenie raz i wdrażanie tego samego artefaktu w wielu środowiskach, zapewniając spójność.

Publikowanie lub skrypt: przed wdrożeniem w poufnych środowiskach możesz przejrzeć plan wdrożenia. Pakiet SqlPackage obsługuje Script akcję, która generuje skrypt języka T-SQL, który będzie wykonywany podczas wdrażania bez stosowania zmian. Podany skrypt języka T-SQL umożliwia administratorom bazy danych lub recenzentom sprawdzenie dokładnych zmian niezbędnych do zastosowania przed zatwierdzeniem .dacpac . Podobnie akcja DeployReport generuje raport XML planowanych zmian.

Zatwierdzenia i bramy środowiska: wdrożenia produkcyjne zwykle wymagają przepływów pracy zatwierdzania, aby zapobiec niezamierzonym zmianom. Zarówno funkcja GitHub Actions, jak i usługa Azure DevOps obsługują zatwierdzenia oparte na środowisku. W usłudze GitHub można skonfigurować środowiska z wymaganymi recenzentami i czasomierzami oczekiwania. W usłudze Azure DevOps środowiska obsługują bramy zatwierdzania, ograniczenia godzin pracy i inne mechanizmy kontroli wdrażania. Te kontrolki pomagają zagwarantować, że zmiany bazy danych zostaną przejrzyone i zatwierdzone przed dotarciem do środowiska produkcyjnego.

Wymagania wstępne

Pakiet SqlPackage jest międzyplatformowy i działa w systemach Windows, Linux i macOS. Zainstaluj go jako narzędzie globalne platformy .NET, aby zapewnić spójne zachowanie w różnych środowiskach.

  • Zestaw .NET SDK zainstalowany na agencie kompilacji.

  • Pakiet SqlPackage zainstalowany na agencie kompilacji. Pakiet SqlPackage można zainstalować jako narzędzie globalne platformy .NET:

    dotnet tool install --global microsoft.sqlpackage
    

Platformy dostarczania oprogramowania

Wybierz środowisko zgodne z wymaganiami zespołu dotyczącymi narzędzi, zgodności i łączności.

Zarządzane środowiska wirtualne

Środowiska wirtualne zarządzane przez firmę Microsoft dla hostowanych modułów uruchamiających funkcji GitHub Actions i agentów usługi Azure Pipelines obejmują wstępnie zainstalowane narzędzia:

Środowisko Pakiet SDK dla platformy .NET SqlPackage
Windows Preinstalled Preinstalled
Linux Preinstalled Nie zainstalowano wstępnie
macOS Preinstalled Nie zainstalowano wstępnie

W środowiskach systemu Linux i macOS zainstaluj pakiet SqlPackage w ramach przepływu pracy. Aby uzyskać więcej informacji na temat instalacji i przechowywania wersji programu SqlPackage w potokach, zobacz SqlPackage in development pipelines (Pakiet SqlPackage w potokach programowania).

Środowiska hostowane samodzielnie

Wdróż z własnego modułu uruchamiającego lub agenta, gdy potrzebujesz większej kontroli nad środowiskiem, na przykład:

  • Wymagania dotyczące izolacji sieci (uzyskiwanie dostępu do baz danych, które nie są uwidocznione w publicznym Internecie)
  • Niestandardowe narzędzia lub określone wersje pakietu SqlPackage
  • Zgodność lub zasady zabezpieczeń

Możesz wdrożyć własne moduły uruchamiacze jako zadania usługi Azure Container Apps na potrzeby wykonywania bezserwerowego opartego na zdarzeniach. Użyj tego podejścia, aby zdefiniować środowisko w pliku Dockerfile i zainstalować pakiet SqlPackage i inne narzędzia zgodnie z potrzebami.

GitHub Actions

Akcja wdrażania usługi Azure SQL (azure/sql-action) zapewnia zintegrowane środowisko wdrażania projektów i .dacpac plików SQL w usługach Azure SQL i SQL Server z dowolnego modułu uruchamiającego akcje GitHub Actions.

Kluczowe możliwości:

  • Wdraża skrypty .dacpac, .sqlprojlub .sql .
  • Obsługuje uwierzytelnianie SQL, uwierzytelnianie identyfikatora Entra firmy Microsoft i uwierzytelnianie jednostki usługi.
  • Automatycznie dodaje i usuwa tymczasowe reguły zapory dla usługi Azure SQL Database w połączeniu z usługą azure/login.
  • Działa zarówno na modułach uruchamianych w systemach Windows, jak i Linux.

Przykład: wdrażanie projektu SQL przy użyciu funkcji 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'

W przypadku wdrożeń usługi Azure SQL Database, które wymagają tymczasowej reguły zapory, dodaj azure/login krok przed :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'

Pakiet SqlPackage można również użyć bezpośrednio w dowolnym module uruchamiającym. Aby uzyskać więcej informacji, zobacz SqlPackage in development pipelines (Pakiet SqlPackage w potokach programowania).

Azure Pipelines

Usługa Azure DevOps udostępnia zadanie SqlAzureDacpacDeployment służące do wdrażania .dacpac plików i skryptów SQL w usłudze Azure SQL Database.

Kluczowe możliwości:

  • .dacpac Wdraża pliki lub wykonuje skrypty SQL.
  • Obsługuje uwierzytelnianie SQL, uwierzytelnianie identyfikatora Entra firmy Microsoft i uwierzytelnianie jednostki usługi.
  • Automatycznie zarządza regułami zapory dla usługi Azure SQL Database.
  • Wymaga agenta systemu Windows (użyj pakietu SqlPackage bezpośrednio w agentach systemu Linux).

Przykład: wdrażanie za .dacpac pomocą usługi 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'

W przypadku agentów systemu Linux lub większej kontroli nad procesem wdrażania użyj pakietu SqlPackage bezpośrednio:

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'

Inne platformy ciągłej integracji/ciągłego wdrażania

W przypadku platform, takich jak Ciągła integracja/ciągłe wdrażanie w narzędziu GitLab, Jenkins, CircleCI lub inne, użyj pakietu SqlPackage bezpośrednio do kompilowania i wdrażania projektów SQL.

Budowanie projektu

dotnet build ./Database.sqlproj -c Release

Wdróż .dacpac

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