開發管線中的 SqlPackage
SqlPackage 是命令列公用程式,可將數種資料庫開發工作自動化,而且能夠併入 CI/CD 管線。
虛擬環境
注意
建議針對管線自動化使用 SqlPackage 的獨立安裝,而非使用與其他應用程式配套的 SqlPackage 可執行檔,包括SQL Server Management Studio 或 Visual Studio。 SqlPackage 的獨立安裝會更頻繁地更新,而且不會繫結至其他應用程式的發行頻率。
在 Windows 上,SqlPackage 的獨立安裝位於路徑 C:\Program Files\Microsoft SQL Server\160\DAC\bin
(DacFx.msi) 或 %USERPROFILE%\.dotnet\tools
(dotnet 工具)。 在 Linux 上,SqlPackage 的獨立安裝可在路徑 ~/.dotnet/tools
(dotnet 工具) 取得。 在 Windows 和 Linux 環境中,如果您下載適用於 .NET Core 的自封式.zip SqlPackage,您可以將可執行檔解壓縮到您選擇的位置。
受控虛擬環境
用於 GitHub Actions 所裝載的執行器與 Azure Pipelines VM 映像的虛擬環境,是在 runner-images \(英文\) GitHub 存放庫中管理的。 SqlPackage 包含在數個環境中,包括 windows-latest
和 ubuntu-latest
。 runner-images 中每個 SqlPackage 版本發行後的數週內會更新到映像中。
自我裝載虛擬環境
在自我裝載的虛擬環境中使用 SqlPackage,例如自我裝載的 Azure DevOps 代理程式,定期更新應用程式,以維護最新版本環境。
追蹤部署
您可以擷取一些與 SqlPackage 相關的檔案,以重現管線並改善部署追蹤。 實作和使用案例會因您的特定架構和自動化環境而有所不同。
- Dacpac 檔案
- 任何動作的診斷檔案輸出:在任何
/DiagnosticsFile:
SqlPackage 動作上使用參數,請參閱 在管線代理程式中取得 SqlPackage 診斷 - 在發佈動作之前,從指令碼動作輸出: 在叫用發行動作之前,請先使用指令碼 SqlPackage 動作
其他 SqlPackage 範例
檢查 SqlPackage 版本
在疑難排解工作期間,請務必了解正在使用的 SqlPackage 版本。 若要擷取此資訊,可以為管線新增步驟,以搭配 /version
參數執行 SqlPackage。 下面所提供的範例是以 Microsoft 與 GitHub 受控環境為基礎,自我裝載的環境針對工作目錄可能會有不同的安裝路徑。
Azure Pipelines
在 Azure Pipeline 中,指令碼關鍵字會傳回 SqlPackage 版本號碼。
- script: SqlPackage /version
workingDirectory: 'C:\Program Files\Microsoft SQL Server\160\DAC\bin\'
displayName: 'get sqlpackage version'
GitHub 動作
在 GitHub Action 工作流程中,執行關鍵字會傳回 SqlPackage 版本號碼。
- name: get sqlpackage version
working-directory: 'C:\Program Files\Microsoft SQL Server\160\DAC\bin\'
run: ./SqlPackage /version
取得管線代理程式中的 SqlPackage 診斷
SqlPackage 的診斷資訊可透過 /DiagnosticsFile
參數在命令列中使用,可用於 Azure Pipelines 和 GitHub Actions 等虛擬環境中。 診斷資訊會寫入工作目錄中的檔案。 檔案名由 /DiagnosticsFile
參數決定。
Azure Pipelines
將 /DiagnosticsFile
參數新增至 Azure Pipeline SqlAzureDacpacDeployment 組態中的 [其他 SqlPackage 引數] 欄位,會導致 SqlPackage 診斷資訊寫入指定的檔案。 在 SqlAzureDacpacDeployment 工作之後,您可以發佈管線成品,以在虛擬環境外部提供診斷檔案,如下列範例所示。
- 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'
管線執行後,您可以從 [已發佈成品] 底下的 [執行摘要] 頁面下載診斷檔案。
GitHub 動作
將 /DiagnosticsFile
參數新增至 GitHub Action sql-action 組態中的 「arguments」 欄位會導致 SqlPackage 診斷資訊寫入指定的檔案。 在 sql-action 工作之後,您可以發佈成品,以在虛擬環境外部提供診斷檔案,如下列範例所示。
- 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'
更新管線代理程式上的 SqlPackage
在某些情況下,管線環境中安裝的目前 SqlPackage 版本可能不足。 如果無法直接修改環境,則可以使用其他步驟在管線執行期間安裝較新版本的 SqlPackage。 請務必先執行安裝步驟,再執行管線中的任何 DacPac 或 BacPac 作業。 此工作可以與檢查版本的步驟結合,以確保升級如預期般完成。
Azure Pipelines
當 PowerShell 工作用於 Azure Pipeline 時,可以將步驟新增至 Azure Pipeline,以下載所需的 MSI,並以無訊息方式安裝。
- 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
下一步
- 深入了解 SqlPackage