在 Azure DevOps 管道(yaml 不是经典 gui)中部署 dacpac 之前,是否有一种一流的公民*方法来备份数据库? 如果没有“简单按钮”,我该怎么做?
参考:
WinRM SQL Server 数据库部署任务*当我看到一等公民时,我的意思是推出自己的自定义解决方案,而是使用 MSFT 生态系统提供的通用解决方案。
/p: "BackupDatabaseBeforeChanges=True"
指定它,也可以在数据库项目的发布配置文件中指定它。右键单击项目=>发布=>高级=>“部署前备份数据库”,然后将配置文件保存在项目中。
如果您在 Azure 中使用“SQL Server 数据库部署”任务,则可以将 /p: "BackupDatabaseBeforeChanges=True"
backup.sql
将构建操作设置为
none
EXECUTE dbo.DatabaseBackup @Databases = '__DbName__'
,@Directory = '__DbBackupLocation__'
steps:
- publish: $(System.DefaultWorkingDirectory)/db-backup.sql
artifact: DB Artifact
发布工件
DbName
DbBackupLocation
参考:deployment
任务,因此工件会自动下载;参考:发布和部署作业中的工件
steps:
- task: replacetokens@3
displayName: DB Untoken
inputs:
rootDirectory: $(Pipeline.Workspace)\DB Artifact\
targetFiles: *.sql
tokenPrefix: __
tokenSuffix: __
使用SqlDacpacDeploymentOnMachineGroup 以下是我在 Azure Pipeline 中使用内联 PowerShell 脚本完成此操作的方法:
Write-Host "Backing up database: $(DatabaseName) on $(DatabaseServer)"
Write-Host ""
# Backup to a filename like "MikesDatabase_20231201.bak"
$sqlBackup ="BACKUP DATABASE [$(DatabaseName)] TO DISK = '$(BackupDbLocation)\$(DatabaseName)_ymd.bak' WITH COMPRESSION, INIT, SKIP, STATS=10 "
$sqlBackup = $sqlBackup.replace("ymd","$(get-date -f yyyyMMdd)");
Write-Host "Running Invoke-Sqlcmd backup command:"
Write-Host $sqlBackup
Invoke-Sqlcmd -ServerInstance "$(DatabaseServer)" -Database "$(DatabaseName)" -Query "$sqlBackup" -Verbose
Write-Host ""
在我的 Azure 库中,我定义了三个变量:
数据库服务器