Share via


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

Se si usa SqlPackage in un ambiente virtuale self-hosted, ad esempio un agente Azure DevOps self-hosted, è consigliabile aggiornare l'applicazione regolarmente per mantenere l'ambiente con la versione più recente.

Rilevamento delle distribuzioni

Esistono alcuni file correlati a SqlPackage che possono essere acquisiti come artefatti della pipeline per creare la riproducibilità dell'esecuzione della pipeline e migliorare il rilevamento della distribuzione. I casi d'uso e implementazione variano a seconda dell'architettura e dell'ambiente di automazione specifici.

  • File Dacpac
  • Output del file di diagnostica da qualsiasi azione: usare il parametro /DiagnosticsFile: in qualsiasi azione SqlPackage, vedere l'esempio seguente
  • Output dall'azione di script prima dell'azione di pubblicazione: usare l'azione Script SqlPackage prima di richiamare un'azione di pubblicazione

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

Usando la parola chiave script in una pipeline di Azure, è possibile aggiungere un passaggio a una pipeline di Azure che restituisce il numero di versione di SqlPackage.

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

Azioni di GitHub

Usando la parola chiave run in un flusso di lavoro di GitHub Actions, è possibile aggiungere un passaggio a un'azione di GitHub che 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

Recupero della 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".

Azioni di GitHub

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