在管道中部署之前备份数据库

问题描述 投票:0回答:3

在 Azure DevOps 管道(yaml 不是经典 gui)中部署 dacpac 之前,是否有一种一流的公民*方法来备份数据库? 如果没有“简单按钮”,我该怎么做?

参考:

WinRM SQL Server 数据库部署任务

*当我看到一等公民时,我的意思是
不是

推出自己的自定义解决方案,而是使用 MSFT 生态系统提供的通用解决方案。

sql-server azure-devops azure-pipelines sql-server-data-tools
3个回答

0
投票

在DB项目中添加sql脚本,

backup.sql
  1. 将构建操作设置为 
    none
  2. 备份脚本

EXECUTE dbo.DatabaseBackup @Databases = '__DbName__' ,@Directory = '__DbBackupLocation__'

建造方

将该文件添加到 ADO 工件中

  1. steps: - publish: $(System.DefaultWorkingDirectory)/db-backup.sql artifact: DB Artifact
参考:
发布工件

图书馆一侧

在变量组中,添加变量

DbName
  1. DbBackupLocation
    
    
    参考:
  2. 创建变量组

部署端

假设:

您正在使用

deployment任务,因此工件会自动下载;参考:发布和部署作业中的工件



导入变量组;参考:

使用变量组
  1. qetza/vsts-replacetokens-task
  2. 调用替换令牌任务 steps: - task: replacetokens@3 displayName: DB Untoken inputs: rootDirectory: $(Pipeline.Workspace)\DB Artifact\ targetFiles: *.sql tokenPrefix: __ tokenSuffix: __
使用 
SqlDacpacDeploymentOnMachineGroup
    执行
  1. backup.sql
    steps:
    - task: SqlDacpacDeploymentOnMachineGroup@0
      displayName: DB Backup
      inputs:
        taskType: sqlQuery
        sqlFile: $(Pipeline.Workspace)\DB Artifact\db-backup.sql
        serverName: localhost
        databaseName: master
        authScheme: windowsAuthentication
        additionalArgumentsSql: -Verbose -Querytimeout 0
    
以下是我在 Azure Pipeline 中使用内联 PowerShell 脚本完成此操作的方法:

0
投票
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 库中,我定义了三个变量:

数据库服务器

    数据库名称
  • 备份数据库位置
  • ...所以我可以根据环境修改这些。

© www.soinside.com 2019 - 2024. All rights reserved.