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.
- File Dacpac
- Output del file di diagnostica da qualsiasi azione: usare il parametro
/DiagnosticsFile:
in qualsiasi azione SqlPackage, vedere Ottenere la diagnostica di SqlPackage in un agente della pipeline - 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
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
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
- Altre informazioni su sqlpackage