Condividi tramite


SqlPackage nelle pipeline di sviluppo

SqlPackage è un'utilità della riga di comando che automatizza diverse attività di sviluppo di database e può essere incorporata nelle pipeline CI/CD.

Ambienti virtuali

Nota

È consigliabile usare un'installazione autonoma di SqlPackage per l'automazione della pipeline usando i file eseguibili SqlPackage in bundle con altre applicazioni, tra cui SQL Server Management Studio o Visual Studio. L'installazione autonoma di SqlPackage viene aggiornata più frequentemente e non è associata alla frequenza di rilascio di altre applicazioni.

In Windows l'installazione autonoma di SqlPackage è disponibile nel percorso C:\Program Files\Microsoft SQL Server\160\DAC\bin (DacFx.msi) o %USERPROFILE%\.dotnet\tools (strumento dotnet). In Linux, l'installazione autonoma di SqlPackage è disponibile nel percorso ~/.dotnet/tools (strumento dotnet). In entrambi gli ambienti Windows e Linux, se si scarica il file zip SqlPackage autonomo per .NET Core, è possibile estrarre il file eseguibile in un percorso scelto.

Ambienti virtuali gestiti

Gli ambienti virtuali usati per gli strumenti di esecuzione ospitati di GitHub Actions e le immagini delle macchine virtuali di Azure Pipelines sono gestiti nel repository GitHub runner-images. SqlPackage è incluso in diversi ambienti, tra cui windows-latest e ubuntu-latest. Gli aggiornamenti delle immagini in runner-images vengono eseguiti entro poche settimane da ogni rilascio di SqlPackage.

Ambienti virtuali self-hosted

In un ambiente virtuale self-hosted, ad esempio un agente Azure DevOps self-hosted, aggiornare l'applicazione regolarmente per mantenere l'ambiente con la versione più recente.

Rilevamento delle distribuzioni

È possibile acquisire alcuni file correlati a SqlPackage per riprodurre le pipeline e migliorare il rilevamento della distribuzione. I casi d'uso e implementazione dipendono dall'architettura e dall'ambiente di automazione specifici.

Altri esempi di SqlPackage

Controllo della versione di SqlPackage

Durante la risoluzione dei problemi, è importante conoscere la versione di SqlPackage in uso. L'acquisizione di queste informazioni può essere eseguita aggiungendo un passaggio alla pipeline per eseguire SqlPackage con il parametro /version. Di seguito sono riportati alcuni esempi basati sugli ambienti gestiti Microsoft e GitHub. Gli ambienti self-hosted possono avere percorsi di installazione diversi per la directory di lavoro.

Azure Pipelines

In una Azure Pipeline la parola chiave script restituisce il numero di versione di SqlPackage.

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

GitHub Actions

In un flusso di lavoro di GitHub Action la parola chiave esegui restituisce il numero di versione di SqlPackage.

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

Output dell'azione di GitHub che visualizza il numero di build 15.0.4897.1

Ottenere la diagnostica sqlPackage in un agente della pipeline

Le informazioni di diagnostica di SqlPackage sono disponibili nella riga di comando tramite il parametro /DiagnosticsFile, che può essere usato negli ambienti virtuali, ad esempio Azure Pipelines e GitHub Actions. Le informazioni di diagnostica sono scritte in un file nella directory di lavoro. Il nome del file viene dettato dal parametro /DiagnosticsFile.

Azure Pipelines

L'aggiunta del parametro /DiagnosticsFile al campo "Argomenti aggiuntivi SqlPackage" nella configurazione di SqlAzureDacpacDeployment di Azure Pipeline causerà la scrittura delle informazioni di diagnostica SqlPackage nel file specificato. Dopo l'attività SqlAzureDacpacDeployment, il file di diagnostica può essere reso disponibile all'esterno dell'ambiente virtuale pubblicando un artefatto della pipeline come illustrato nell'esempio seguente.

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

Dopo l'esecuzione della pipeline, il file di diagnostica può essere scaricato dalla pagina di riepilogo dell'esecuzione in "Artefatti pubblicati".

GitHub Actions

L'aggiunta del parametro /DiagnosticsFile al campo "arguments" nella configurazione sql-action di GitHub Action causerà la scrittura delle informazioni di diagnostica sqlPackage nel file specificato. Dopo l'attività sql-action task, il file di diagnostica può essere reso disponibile all'esterno dell'ambiente virtuale pubblicando un artefatto come illustrato nell'esempio seguente.

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

Aggiornare SqlPackage nell'agente della pipeline

In alcuni scenari, la versione corrente di SqlPackage installata nell'ambiente della pipeline potrebbe non essere sufficiente. Se l'ambiente non può essere modificato direttamente, è possibile usare un passaggio aggiuntivo per installare una versione più recente di SqlPackage durante l'esecuzione della pipeline. È importante eseguire il passaggio di installazione prima di eseguire operazioni DacPac o BacPac nella pipeline. Questa attività può essere combinata con un passaggio per controllare la versione e fare in modo che l'aggiornamento venga completato come previsto.

Azure Pipelines

Quando l'attività PowerShell viene usata in una pipeline di Azure, è possibile aggiungere un passaggio a una pipeline di Azure che scarica l'identità del servizio gestito desiderata e la installa in modo invisibile all'utente.

- 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

Passaggi successivi