Megosztás:


SqlPackage fejlesztési folyamatokban

Az SqlPackage egy parancssori segédprogram, amely számos adatbázis-fejlesztési feladatot automatizál, és beépíthető a CI/CD-folyamatokba.

Megjegyzés:

A folyamatautomatizáláshoz ajánlott az SqlPackage önálló telepítésének használata, ahelyett hogy a más alkalmazásokkal, például az SQL Server Management Studióval vagy a Visual Studióval együtt csomagolt SqlPackage futtatható fájlokat használnánk. Az SqlPackage önálló telepítése gyakrabban frissül, és nem kapcsolódik más alkalmazások kiadási üteméhez.

Ha az SqlPackage globális dotnet-eszközként van telepítve (ajánlott), egyszerűen bármelyik könyvtárból meghívhatja azt a folyamatban sqlpackage . Ha az SqlPackage különálló futtatható fájlként van telepítve, meg kell adnia a futtatható fájl teljes elérési útját a folyamatban. Windows rendszeren az SqlPackage önálló telepítése elérhető az elérési úton C:\Program Files\Microsoft SQL Server\170\DAC\bin (DacFx.msi). ** Windows- és Linux-környezetben, ha letölti az önálló .zip SqlPackage a .NET számára, a végrehajtható fájl egy ön által választott helyre bontható ki.

Felügyelt virtuális környezetek

A GitHub Actions által üzemeltetett futókhoz és az Azure Pipelines virtuálisgép-rendszerképekhez használt virtuális környezetek a futóképek GitHub-adattárában vannak kezelve. Az SqlPackage több környezetben is megtalálható, többek között windows-latest és ubuntu-22.04, de már nem szerepel alapértelmezetten a ubuntu-24.04 és a ubuntu-latest környezetekben. A futó képeken lévő képek frissítése az SqlPackage egyes kiadásaitól számított néhány héten belül történik.

Kezelt virtuális környezetben az SqlPackage-et a futtatási környezetben telepítené a pipelineban. A telepítés külön lépésként történik az Azure Pipelinesban és a GitHub Actionsben, és a telepítés során rövid késleltetést ad az egyes folyamatok futtatásához. Az SqlPackage futtatókörnyezetben való telepítéséhez adjon hozzá egy lépést ahhoz a folyamathoz, amely a dotnet CLI használatával telepíti az SqlPackage-t globális eszközként. Ezt a lépést a folyamat SqlPackage-műveletei előtt kell futtatni.

dotnet tool install --global Microsoft.SqlPackage

Előfordulhat, hogy az SqlPackage telepítése előtt el kell végeznie egy .NET-telepítési lépést a folyamatban, amelyet egy hibaüzenet jelez, amely szerint a .NET nem található. Konfiguráljon egy integrált műveletet, például az Azure Pipelines UseDotNet feladatát vagy a setup-dotnet műveletet a GitHub Actions-ben.

Igény szerint megadhatja az SqlPackage telepíteni kívánt verzióját a telepítési parancshoz fűzve --version <version> , vagy használhatja a --prerelease jelölőt egy előzetes verzió telepítéséhez.

Példa: Az SqlPackage telepítésének lépései az Azure DevOps Pipelinesban

Az Azure DevOps Pipelinesban a UseDotNet-feladattal telepítheti a .NET SDK-t, majd globális eszközként telepítheti az SqlPackage-t. Ha a Microsoft által biztosított Windows-ügynököt használ, az SqlPackage már telepítve van.C:\Program Files\Microsoft SQL Server\170\DAC\bin Ha saját üzemeltetésű ügynököt használ, telepítheti az SqlPackage-t a gazdakörnyezetben, így kihagyhatja ezt a lépést a folyamatban.

- task: UseDotNet@2
  inputs:
    packageType: 'sdk'
    version: '8.x'
- script: dotnet tool install --global Microsoft.SqlPackage --version <version>
  displayName: 'Install specific version of SqlPackage'

Példa: Az SqlPackage telepítésének lépései a GitHub Actionsben

A GitHub Actionsben a setup-dotnet művelet használatával telepítheti a .NET SDK-t, majd globális eszközként telepítheti az SqlPackage-t. Ha a GitHub által biztosított Windows-futót használ, az SqlPackage már telepítve van a C:\Program Files\Microsoft SQL Server\170\DAC\binrendszerben. Ha saját üzemeltetésű futót használ, telepítheti az SqlPackage-t a gazdakörnyezetre is, és kihagyhatja ezt a lépést a munkafolyamatban.

- name: Setup .NET
  uses: actions/setup-dotnet@v4
  with:
    dotnet-version: '8.x'
- name: Install SqlPackage
  run: dotnet tool install --global Microsoft.SqlPackage --version <version>

Az SqlPackage verziójának ellenőrzése

A hibaelhárítás során fontos tudni, hogy az SqlPackage verzió használatban van. Ezeket az információkat úgy rögzítheti, hogy hozzáad egy lépést a folyamathoz az SqlPackage paraméterrel való /version futtatásához. Ebben a cikkben példákat talál az Azure DevOps és a GitHub által felügyelt környezetek alapján, a saját üzemeltetésű környezetek eltérő telepítési útvonalokkal rendelkezhetnek a munkakönyvtárhoz.

Azure Pipelines

Egy Azure Pipeline-ban a szkript kulcsszó az SqlPackage verziószámát adja vissza.

- script: SqlPackage /version
  workingDirectory: 'C:\Program Files\Microsoft SQL Server\170\DAC\bin\'
  displayName: 'get sqlpackage version'

GitHub Actions

Egy GitHub Action-munkafolyamatban a futtatási kulcsszó az SqlPackage verziószámát adja vissza.

- name: get sqlpackage version
  working-directory: 'C:\Program Files\Microsoft SQL Server\170\DAC\bin\'
  run: ./SqlPackage /version

GitHub-művelet kimenete, amely a 15.0.4897.1-es buildszámot mutatja

Az SqlPackage frissítése a folyamatügynökön

Bizonyos esetekben előfordulhat, hogy a folyamatkörnyezetben telepített SqlPackage jelenlegi verziója nem elegendő. Ha a környezet nem módosítható közvetlenül, egy további lépéssel telepítheti az SqlPackage újabb verzióját a folyamat futtatása során. Fontos, hogy a dacPac- vagy BacPac-műveletek futtatása előtt futtassa a telepítési lépést. Ez a feladat kombinálható egy lépéssel a verzió ellenőrzéséhez , hogy a frissítés a várt módon fejeződött-e be.

Azure Pipelines, Windows-alapú ügynök

Ha a PowerShell-feladatot egy Azure Pipeline-ban használják, egy lépés hozzáadható egy Azure Pipeline-hoz, amely letölti a kívánt DacFx-telepítőt, és csendesen telepíti azt.

- task: PowerShell@2
  displayName: 'upgrade sqlpackage'
  inputs:
    targetType: 'inline'
    script: |
      # use evergreen or specific dacfx msi link below
      wget -O DacFramework.msi "https://aka.ms/dacfx-msi"
      msiexec.exe /i "DacFramework.msi" /qn

GitHub Actions, Linux-alapú futóprogram

Egy GitHub Action-munkafolyamatban a futtatási kulcsszóval végrehajthatja a parancsokat az dotnet tool SqlPackage telepítéséhez, eltávolításához vagy frissítéséhez. Az alábbi példa bemutatja, hogyan frissítheti az SqlPackage-t a legújabb előzetes verzióra:

- name: Update SqlPackage
  run: dotnet tool update --global Microsoft.SqlPackage --prerelease

Saját üzemeltetésű virtuális környezetek

Egy saját üzemeltetésű virtuális környezetben, például egy saját üzemeltetésű Azure DevOps-ügynökön vagy a GitHub Actions futóján telepítheti az SqlPackage-t a gazdakörnyezetre, vagy telepítheti az SqlPackage-t futtatókörnyezetben a felügyelt virtuális környezetekben leírtak szerint. Ha az SqlPackage-t a gazdagépkörnyezetre telepíti, az azon futó pipeline-oknak nem kell futásidőben telepíteniük az SqlPackage-t, ami felgyorsíthatja a pipeline futását. Ha az SqlPackage telepítve van a gazdagépen, rendszeresen frissítenie kell az SqlPackage-t , hogy a környezetet a legújabb verzióval tartsa karban.

Az Azure Container Apps-feladatok segítségével önkiszolgáló futókat helyezhet üzembe egy olyan tárolóban, amely szükség szerint van üzembe helyezve az egyes munkafolyamat-meghívásokhoz. A Container Apps-feladatok segítségével szabályozhatja a dockerfile-ban meghatározott környezetet, és szükség szerint telepítheti az SqlPackage-t és más eszközöket. A saját üzemeltetésű futó úgy konfigurálható, hogy az SqlPackage egy meghatározott verzióján fusson, az installációs lépés konténerképbe való belefoglalásával. Az oktatóanyag például tartalmaz egy Dockerfile-t, amely telepíti a curl és jq.

Ezt a példát módosíthatjuk úgy, hogy létrehozzuk a .NET 8.0-t és az SqlPackage-t telepítő tárolólemezképet:

FROM ghcr.io/actions/actions-runner:2.323.0

USER root

# install dotnet sdk and sqlpackage
RUN apt-get update && apt-get install -y dotnet-sdk-8.0 && \
    dotnet tool install --tool-path /usr/local/bin/ Microsoft.SqlPackage

COPY entrypoint.sh ./entrypoint.sh
RUN chmod +x ./entrypoint.sh

USER runner

ENTRYPOINT ["./entrypoint.sh"]

A telepítések nyomon követése

Az SqlPackage-hez kapcsolódó fájlokat rögzítheti a folyamatok reprodukálásához és az üzembe helyezés nyomon követésének javításához. A megvalósítási és használati esetek az adott architektúrától és automatizálási környezettől függenek.

  • Dacpac-fájl

  • Diagnosztikai fájlkimenet bármely műveletből: Használja a paramétert /DiagnosticsFile: bármely SqlPackage-művelethez. További információ: SqlPackage-diagnosztikák lekérése folyamatügynökben

  • Kimenet a szkriptműveletből a közzétételi művelet előtt: Közzétételi művelet meghívása előtt használja a Script SqlPackage műveletet

SqlPackage-diagnosztika lekérése folyamatügynökben

Az SqlPackage diagnosztikai adatai a parancssorban érhetők el a paraméteren /DiagnosticsFilekeresztül, amely olyan virtuális környezetekben használható, mint az Azure Pipelines és a GitHub Actions. A diagnosztikai információk a munkakönyvtárban lévő fájlba lesznek írva. A fájl nevét a /DiagnosticsFile paraméter szabja meg.

Azure Pipelines

Ha hozzáadja a /DiagnosticsFile paramétert a "További SqlPackage argumentumok" mezőhöz az Azure Pipeline SqlAzureDacpacDeployment konfigurációjában, az SqlPackage diagnosztikai adatai a megadott fájlba lesznek írva. Az SqlAzureDacpacDeployment feladatot követően a diagnosztikai fájl a virtuális környezeten kívül is elérhető egy folyamatösszetevő közzétételével, ahogyan az az alábbi példában látható.

- task: SqlAzureDacpacDeployment@1
  inputs:
    azureSubscription: '$(azuresubscription)'
    AuthenticationType: 'server'
    ServerName: '$(servername)'
    DatabaseName: '$(databasename)'
    SqlUsername: '$(sqlusername)'
    SqlPassword: '$(sqladminpassword)'
    deployType: 'DacpacTask'
    DeploymentAction: 'Publish'
    DacpacFile: '$(Build.Repository.LocalPath)\$(dacpacname).dacpac'
    AdditionalArguments: '/DiagnosticsFile:$(System.DefaultWorkingDirectory)/output.log'
    IpDetectionMethod: 'AutoDetect'

- task: PublishPipelineArtifact@1
  inputs:
    targetPath: '$(System.DefaultWorkingDirectory)/output.log'
    artifact: 'Diagnostic File'
    publishLocation: 'pipeline'

A folyamat futtatása után a diagnosztikai fájl letölthető a futtatás összegzési oldaláról a "Közzétett összetevők" alatt.

GitHub Actions

Ha hozzáadja a /DiagnosticsFile paramétert az "argumentumok" mezőhöz a GitHub Action sql-action konfigurációjában, az SqlPackage diagnosztikai adatai a megadott fájlba lesznek írva. Az sql-action feladatot követően a diagnosztikai fájl a virtuális környezeten kívül is elérhetővé tehető az alábbi példában látható összetevő közzétételével.

- name: Azure SQL Deploy
  uses: Azure/sql-action@v2
  with:
    # The connection string, including authentication information, for the Azure SQL Server database.
    connection-string: ${{ secrets.AZURE_SQL_CONNECTION_STRING }}
    # Path to DACPAC file to deploy
    path: .\DatabaseProjectAdventureWorksLT\bin\Release\DatabaseProjectAdventureWorksLT.dacpac
    action: publish
    # additional SqlPackage arguments
    arguments: /DiagnosticsFile:DatabaseProjectAdventureWorksLT/DiagnosticLog.log

- uses: actions/upload-artifact@v2
  with:
    name: 'DiagnosticLog.txt'
    path: 'DatabaseProjectAdventureWorksLT/DiagnosticLog.log'