Azure sql database 在VSTS发布期间备份Azure SQL DB

Azure sql database 在VSTS发布期间备份Azure SQL DB,azure-sql-database,database-backups,azure-powershell,azure-pipelines,azure-pipelines-release-pipeline,Azure Sql Database,Database Backups,Azure Powershell,Azure Pipelines,Azure Pipelines Release Pipeline,我正在探索VSTS版本管理,我想在对其应用任何迁移脚本之前备份托管在Azure SQL DB上的生产数据库。我找不到任何特定的任务或首选的等待方式,直到Azure SQL DB完全备份,以便只有在正确备份数据库后才能继续部署 我已经看过使用PowerShell任务或Azure SQL CMD任务,但我不确定如何让其余任务等待备份完成 如果有人能为我指出正确的方向,我将不胜感激。谢谢。Azure SQL数据库将持续自动备份。如果您试图创建数据库的副本或将数据库归档到BACPAC文件,则可以执行以下

我正在探索VSTS版本管理,我想在对其应用任何迁移脚本之前备份托管在Azure SQL DB上的生产数据库。我找不到任何特定的任务或首选的等待方式,直到Azure SQL DB完全备份,以便只有在正确备份数据库后才能继续部署 我已经看过使用PowerShell任务或Azure SQL CMD任务,但我不确定如何让其余任务等待备份完成
如果有人能为我指出正确的方向,我将不胜感激。谢谢。

Azure SQL数据库将持续自动备份。如果您试图创建数据库的副本或将数据库归档到BACPAC文件,则可以执行以下任一操作


您可以备份Azure SQL数据库并在循环中检查状态

$exportRequest = New-AzureRmSqlDatabaseExport -ResourceGroupName $ResourceGroupName -ServerName $ServerName `
   -DatabaseName $DatabaseName -StorageKeytype $StorageKeytype -StorageKey $StorageKey -StorageUri $BacpacUri `
   -AdministratorLogin $creds.UserName -AdministratorLoginPassword $creds.Password

$importStatus = Get-AzureRmSqlDatabaseImportExportStatus -OperationStatusLink $importRequest.OperationStatusLink
[Console]::Write("Exporting")
while ($importStatus.Status -eq "InProgress")
{
    $importStatus = Get-AzureRmSqlDatabaseImportExportStatus -OperationStatusLink $importRequest.OperationStatusLink
    [Console]::Write(".")
    Start-Sleep -s 10
}
[Console]::WriteLine("")
$importStatus
更多信息,请参阅

另一种方法是,您可以通过使用PowerShell调用Microsoft.SqlServer.Dac.DacServices.ExportBacpac方法来备份Azure SQL数据库

param([string]$ConnectionString, [string]$DatabaseName,[string]$OutputFile,[string]$s)
Add-Type -Path "$s\AzureDatabaseSolution\SQLDatabase\lib\Microsoft.SqlServer.Dac.dll"
$now = $(Get-Date).ToString("HH:mm:ss")
$Services = new-object Microsoft.SqlServer.Dac.DacServices $ConnectionString
Write-Host "Starting at $now"  
$Watch = New-Object System.Diagnostics.StopWatch
$Watch.Start()
$Services.ExportBacpac($OutputFile, $DatabaseName)
$Watch.Stop()
Write-Host "Backup completed in" $Watch.Elapsed.ToString()  
注意:在此包中使用程序集:(我将其添加到源代码管理并映射到构建代理)

另一方面,要添加防火墙规则,可以参考以下线程:


顺便说一句,您可以使用这些PowerShell脚本构建自定义构建/发布步骤/任务

我不相信有一个标准的任务或任何接近它。这应该让你开始。您必须在循环中查询目标副本的状态:谢谢,这似乎是一个不错的选择。我将尝试并报告。还没有,我在您链接时查看了创建自定义构建任务,但我对PowerShell以及如何编写扩展不太熟悉,这样它就可以同时安装Azure PowerShell sdk。我查看了Git中现有的VS Build扩展,但它们似乎使用了很多内部Powershell库,没有直接介绍。所以现在我正在尝试Azure CLI,我让CLI脚本在本地工作。但是,当我在内嵌Azure CLI任务中使用相同的脚本时,它会给出一个“##[error]Unhandled:Failed which:Not found az:null”错误!我确实看到我可以在源代码管理中上载powershell或CLI脚本,然后通过Release powershell任务调用它。但是,在我的源代码管理中使用发布脚本,并且随着发布平台的变化,必须对源代码管理进行新的推送,这感觉是不对的。应该有一种独立的方式来上传和管理我的发布脚本,而不是把它和我的源代码捆绑在一起。我认为目前唯一简单的选择就是走这条路。有什么想法吗?@Sanddy更好的方法是将脚本文件放在源代码管理中,您可以将其放在其他文件夹(TFVC)或其他存储库(git)中,然后将其映射或克隆到build agent(git clone command with command line task)。最后,我不得不使用脚本方式创建PowerShell发布任务,并参考git提供的脚本。链接是我的Powershell脚本,供参考()