適用於:SQL Server
Azure SQL Database
Azure SQL 受控實例
本文概述了不同軟體交付平台上 SQL 專案的自動化選項。 利用自動化將 SQL 資料庫專案整合進 CI/CD 管線,並持續且反覆部署資料庫變更。
要自動化什麼
SQL 專案自動化通常包含 CI/CD 流程中的兩個關鍵任務:
建置 SQL 專案:驗證專案並透過執行
dotnet buildSQL 資料庫專案來編譯部署工件.dacpac()。 可選擇性執行 程式碼分析 規則,在專案建置時檢查程式碼品質。部署 :
.dacpac使用 SqlPackage 或平台特定任務發佈到.dacpac目標資料庫。 部署可針對 Azure SQL 資料庫、Azure SQL 管理實例、SQL Server 或 Fabric 中的 SQL 資料庫。
當你將這些步驟整合進你的 CI/CD 管線時,資料庫變更會在每次提交時被驗證,並在不同環境中一致部署。
常見概念
工件流程:典型的管線將建置階段與部署階段分隔開來。 建置階段會編譯 SQL 專案並產生檔案 .dacpac ,然後以管線工件形式發佈。 在後續部署工作中(可能經過人工核准後),產物會被下載並部署到目標資料庫。 這種分離讓你只需建置一次,就能將同一件工件部署到多個環境,確保一致性。
發佈或腳本:在部署到敏感環境前,您可以先檢視部署計畫。 SqlPackage 支援一個 Script 動作,在部署期間產生 T-SQL 腳本,無需套用變更。 所提供的 T-SQL 腳本允許資料庫管理員或審查者檢視套用 .dacpac 事前核准所需的具體變更。 同樣地,該 DeployReport 動作會產生一份計畫變更的 XML 報告。
環境核准與閘門:生產部署通常需要核准工作流程以防止非預期變更。 GitHub Actions 和 Azure DevOps 都支援基於環境的核准。 在 GitHub 裡, 你可以設定環境 ,並設定必要的審查器和等待計時器。 在 Azure DevOps 中, 環境 支援批准門檻、營業時間限制及其他部署控制。 這些控管措施有助於確保資料庫變更在正式上線前經過審查與核准。
先決條件
SqlPackage 支援跨平台,並可在 Windows、Linux 及 macOS 上運行。 安裝為 .NET 全域工具,以確保各環境行為一致。
.NET SDK 安裝在建置代理程式上。
在建置代理程式上安裝了 SqlPackage。 你可以將 SqlPackage 安裝為 .NET 全域工具:
dotnet tool install --global microsoft.sqlpackage
軟體交付平台
選擇符合團隊工具、合規性及連線需求的環境。
受控虛擬環境
Microsoft 管理的虛擬環境用於 GitHub Actions 託管運行程式與 Azure Pipelines 代理,包含預先安裝的工具:
| 環境 | .NET SDK | SqlPackage |
|---|---|---|
| Windows 作業系統 | Preinstalled | Preinstalled |
| Linux | Preinstalled | 不是預裝的 |
| macOS | Preinstalled | 不是預裝的 |
在 Linux 和 macOS 環境中,將 SqlPackage 作為工作流程的一部分安裝。 欲了解更多關於管線中 SqlPackage 安裝與版本控制的資訊,請參見 開發管線中的 SqlPackage。
自架環境
當你需要對環境有更多控制時,請從自架運行者或代理程式部署,例如:
- 網路隔離要求(存取未暴露於公共網際網路的資料庫)
- 自訂工具或特定 SqlPackage 版本
- 合規或安全政策
你可以部署自架運行者作為 Azure 容器應用的工作 ,以執行事件驅動、無伺服器的執行。 使用此方法在 Dockerfile 中定義環境,並依需求安裝 SqlPackage 及其他工具。
GitHub Actions
Azure SQL 部署動作(azure/sql-action)提供整合體驗,讓可從任何 GitHub Actions 執行器部署 SQL 專案與.dacpac檔案至 Azure SQL 與 SQL Server。
主要功能:
- 部署
.dacpac、.sqlproj或.sql腳本。 - 支援 SQL 認證、Microsoft Entra ID 認證及服務主體認證。
- 結合 Azure SQL 資料庫
azure/login時,會自動新增或移除臨時防火牆規則。 - 在 Windows 和 Linux 運行程式上都能運作。
範例:部署一個使用 GitHub Actions 的 SQL 專案
# .github/workflows/sql-deploy.yml
on: [push]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: azure/sql-action@v2
with:
connection-string: ${{ secrets.AZURE_SQL_CONNECTION_STRING }}
path: './Database.sqlproj'
action: 'publish'
對於需要臨時防火牆規則的 Azure SQL 資料庫部署,請在 以下步驟sql-action前加:azure/login
- uses: azure/login@v2
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- uses: azure/sql-action@v2
with:
connection-string: ${{ secrets.AZURE_SQL_CONNECTION_STRING }}
path: './Database.dacpac'
action: 'publish'
你也可以直接在任何執行線上使用 SqlPackage。 欲了解更多資訊,請參閱 開發流程中的 SqlPackage。
Azure Pipelines
Azure DevOps 提供 SqlAzureDacpacDeployment 任務,用於將 .dacpac 檔案和 SQL 腳本部署到 Azure SQL 資料庫。
主要功能:
- 部署
.dacpac檔案或執行 SQL 腳本。 - 支援 SQL 認證、Microsoft Entra ID 認證及服務主體認證。
- 自動管理 Azure SQL 資料庫的防火牆規則。
- 需要 Windows 代理程式(直接在 Linux 代理程式上使用 SqlPackage)。
範例:使用 Azure DevOps 部署 a .dacpac
# azure-pipelines.yml
trigger:
- main
pool:
vmImage: 'windows-latest'
steps:
- task: SqlAzureDacpacDeployment@1
inputs:
azureSubscription: 'your-service-connection'
AuthenticationType: 'server'
ServerName: 'your-server.database.windows.net'
DatabaseName: 'your-database'
SqlUsername: '$(SqlUser)'
SqlPassword: '$(SqlPassword)'
deployType: 'DacpacTask'
DeploymentAction: 'Publish'
DacpacFile: '$(Build.ArtifactStagingDirectory)/Database.dacpac'
對於 Linux 代理程式或對部署流程有更多控制權,請直接使用 SqlPackage:
steps:
- task: UseDotNet@2
inputs:
packageType: 'sdk'
version: '8.x'
- script: dotnet tool install --global microsoft.sqlpackage
displayName: 'Install SqlPackage'
- script: |
sqlpackage /Action:Publish \
/SourceFile:$(Build.ArtifactStagingDirectory)/Database.dacpac \
/TargetConnectionString:"$(ConnectionString)"
displayName: 'Deploy database'
其他 CI/CD 平台
對於像 GitLab CI/CD、Jenkins、CircleCI 或其他平台,直接使用 SqlPackage 來建置和部署 SQL 專案。
建置專案
dotnet build ./Database.sqlproj -c Release
部署 .dacpac
sqlpackage /Action:Publish \
/SourceFile:./bin/Release/Database.dacpac \
/TargetConnectionString:"Server=your-server;Database=your-db;User Id=user;Password=password;"