如何在Azure DevOps中创建发布流水线递归部署文件夹内所有SQL脚本
批量递归部署SQL脚本到本地SQL Server的Azure DevOps方案
你当前使用的SqlDacpacDeploymentOnMachineGroup@0任务在sqlQuery模式下仅支持指定单个SQL脚本文件,无法通过通配符批量选择文件,因此需要采用以下替代方案实现批量递归部署:
方案1:使用PowerShell脚本遍历执行
编写PowerShell脚本递归获取所有SQL文件,通过sqlcmd工具逐个执行脚本,可按需调整脚本执行顺序。
步骤:
- 在代码仓库中添加PowerShell脚本(例如
Deploy-SqlScripts.ps1):
$serverName = "localhost" $databaseName = "DB_Name" # 递归获取所有SQL文件,按文件路径排序保证执行顺序 $sqlFiles = Get-ChildItem -Path "$(System.DefaultWorkingDirectory)" -Filter "*.sql" -Recurse | Sort-Object FullName foreach ($file in $sqlFiles) { Write-Host "开始执行脚本: $($file.FullName)" sqlcmd -S $serverName -d $databaseName -i $file.FullName -b if ($LASTEXITCODE -ne 0) { throw "执行脚本 $($file.FullName) 失败" } }
- 在Azure DevOps YAML中添加PowerShell任务:
steps: - task: PowerShell@2 displayName: '批量部署SQL脚本' inputs: filePath: '$(System.DefaultWorkingDirectory)\Deploy-SqlScripts.ps1' workingDirectory: '$(System.DefaultWorkingDirectory)'
方案2:使用Batch脚本批量执行
若习惯使用Batch脚本,可编写如下脚本实现递归遍历与执行:
- 添加Batch脚本(例如
DeploySqlScripts.bat):
@echo off setlocal enabledelayedexpansion set "serverName=localhost" set "databaseName=DB_Name" for /r "%System.DefaultWorkingDirectory%" %%f in (*.sql) do ( echo 开始执行脚本: %%f sqlcmd -S %serverName% -d %databaseName% -i "%%f" -b if !errorlevel! neq 0 ( echo 执行脚本 %%f 失败,退出 exit /b !errorlevel! ) )
- 在YAML中添加Cmd任务:
steps: - task: CmdLine@2 displayName: '批量部署SQL脚本' inputs: script: '$(System.DefaultWorkingDirectory)\DeploySqlScripts.bat'
方案3:将SQL脚本打包为DACPAC部署
如果你的SQL脚本可以整理为数据库项目(.sqlproj),可通过Visual Studio生成DACPAC文件,再使用SqlDacpacDeploymentOnMachineGroup@0任务的dacpac模式部署,该模式支持一次性部署整个数据库结构与脚本:
YAML示例:
steps: - task: SqlDacpacDeploymentOnMachineGroup@0 displayName: '部署DACPAC' inputs: TaskType: dacpac DacpacFile: '$(System.DefaultWorkingDirectory)\YourDatabaseProject\bin\Release\YourDatabase.dacpac' ServerName: 'localhost' DatabaseName: 'DB_Name' AdditionalArguments: '/p:GenerateDeploymentScript=True /p:DeploymentScriptFileName=DeployScript.sql'
注意:使用DACPAC部署需要提前将SQL脚本组织为数据库项目,适合结构化的数据库变更管理。
内容的提问来源于stack exchange,提问作者paone
相关产品推荐
相关产品推荐

