Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019
Вы можете автоматически развернуть обновления базы данных в Azure SQL Database после каждой успешной сборки.
Предпосылки
Продукт | Требования |
---|---|
Azure DevOps | - Проект Azure DevOps. Разрешения - : — Для создания подключений к службе необходимо иметь роль администратора или создателя для подключений служб . |
DACPAC
Самый простой способ развертывания базы данных — использовать пакет уровня данных или DACPAC. DACPACs позволяет упаковывать и развертывать изменения схемы и данные. DaCPAC можно создать с помощью проекта базы данных SQL в Visual Studio.
Задача развертывания базы данных SQL Azure — это основной механизм развертывания базы данных в Azure. Эта задача, как и в других встроенных задачах Azure, требует подключения службы Azure в качестве входных данных. Подключение службы Azure сохраняет учетные данные для подключения из Azure Pipelines к Azure.
Самый простой способ начать работу с этой задачей — войти в систему как пользователь, который владеет как организацией Azure DevOps, так и подпиской Azure. В этом случае вам не нужно будет создавать подключение к службе вручную. В противном случае, чтобы узнать, как создать подключение службы Azure, см. статью Создание подключения службы Azure.
Сведения о создании подключения службы Azure см. в статье "Создание подключения службы Azure".
Чтобы развернуть DACPAC в базе данных SQL Azure, используйте задачу развертывания базы данных SQL Azure. Добавьте следующий фрагмент кода в файл YAML:
- task: SqlAzureDacpacDeployment@1
displayName: Execute Azure SQL : DacpacTask
inputs:
azureSubscription: '<Azure service connection>'
ServerName: '<Database server name>'
DatabaseName: '<Database name>'
SqlUsername: '<SQL user name>'
SqlPassword: '<SQL user password>'
DacpacFile: '<Location of Dacpac file in $(Build.SourcesDirectory) after compilation>'
Скрипты SQL
Кроме того, можно использовать скрипты SQL вместо DACPAC для развертывания базы данных. Ниже приведен простой скрипт SQL, который создает пустую базу данных:
USE [main]
GO
IF NOT EXISTS (SELECT name FROM main.sys.databases WHERE name = N'DatabaseExample')
CREATE DATABASE [DatabaseExample]
GO
Чтобы запустить скрипты SQL из конвейера, необходимо добавить и удалить правила брандмауэра в Azure. Без этих правил агент Azure Pipelines не может взаимодействовать с базой данных SQL Azure.
Настройка правил брандмауэра Azure
Следующий сценарий PowerShell создает правила брандмауэра. Сохраните его как SetAzureFirewallRule.ps1
и добавьте его в репозиторий:
[CmdletBinding(DefaultParameterSetName = 'None')]
param
(
[String] [Parameter(Mandatory = $true)] $ServerName,
[String] [Parameter(Mandatory = $true)] $ResourceGroupName,
[String] $FirewallRuleName = "AzureWebAppFirewall"
)
$agentIP = (New-Object net.webclient).downloadstring("https://api.ipify.org")
New-AzSqlServerFirewallRule -ResourceGroupName $ResourceGroupName -ServerName $ServerName -FirewallRuleName $FirewallRuleName -StartIPAddress $agentIP -EndIPAddress $agentIP
Удаление правил брандмауэра Azure
Следующий сценарий PowerShell удаляет правила брандмауэра. Сохраните его как RemoveAzureFirewallRule.ps1
и добавьте его в репозиторий:
[CmdletBinding(DefaultParameterSetName = 'None')]
param
(
[String] [Parameter(Mandatory = $true)] $ServerName,
[String] [Parameter(Mandatory = $true)] $ResourceGroupName,
[String] $FirewallRuleName = "AzureWebAppFirewall"
)
Remove-AzSqlServerFirewallRule -ServerName $ServerName -FirewallRuleName $FirewallRuleName -ResourceGroupName $ResourceGroupName
Развертывание базы данных с помощью скриптов SQL
В следующем примере описаны шаги по добавлению правил брандмауэра, развертыванию базы данных с помощью скриптов SQL и удалению правил брандмауэра:
variables:
AzureSubscription: '<SERVICE_CONNECTION_NAME>'
ResourceGroupName: '<RESOURCE_GROUP_NAME>'
ServerName: '<DATABASE_SERVER_NAME>'
ServerFqdn: '<DATABASE_FQDN>'
DatabaseName: '<DATABASE_NAME>'
AdminUser: '<DATABASE_USERNAME>'
AdminPassword: '<DATABASE_PASSWORD>'
SQLFile: '<LOCATION_OF_SQL_FILE_IN_$(Build.SourcesDirectory)>'
steps:
- task: AzurePowerShell@5
displayName: 'Set Azure firewall rules'
inputs:
azureSubscription: '$(AzureSubscription)'
ScriptType: filePath
ScriptPath: '$(Build.SourcesDirectory)\scripts\SetAzureFirewallRule.ps1'
ScriptArguments: '-ServerName $(ServerName) -ResourceGroupName $(ResourceGroupName)'
azurePowerShellVersion: LatestVersion
- task: PowerShell@2
inputs:
displayName: 'Install SqlServer module if not present'
targetType: 'inline'
script: |
if (-not (Get-Module -ListAvailable -Name SqlServer)) {
Install-Module -Name SqlServer -Force -AllowClobber
}
- task: PowerShell@2
displayName: 'Deploy database'
inputs:
targetType: 'inline'
script: |
Invoke-Sqlcmd -InputFile $(SQLFile) -ServerInstance $(ServerFqdn) -Database $(DatabaseName) -Username $(AdminUser) -Password $(AdminPassword)
- task: AzurePowerShell@5
displayName: 'Remove Azure firewall rules'
inputs:
azureSubscription: '$(AzureSubscription)'
ScriptType: filePath
ScriptPath: '$(Build.SourcesDirectory)\scripts\RemoveAzureFirewallRule.ps1'
ScriptArguments: '-ServerName $(ServerName) -ResourceGroupName $(ResourceGroupName)'
azurePowerShellVersion: LatestVersion
Условное развертывание базы данных
Вы можете деплоить только определенные сборки в базе данных Azure, что дает вам больше контроля над тем, какие изменения применяются на основе критериев, например, исходной ветви или состояния сборки.
В YAML можно использовать один из следующих приемов:
Изолируйте шаги развертывания в отдельное задание и примените условие к этому заданию.
Добавьте условие непосредственно в шаг.
В приведенном ниже примере показано, как развертывать только сборки из основной ветви с помощью условий:
- task: SqlAzureDacpacDeployment@1
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
inputs:
azureSubscription: '<Azure service connection>'
ServerName: '<Database server name>'
DatabaseName: '<Database name>'
SqlUsername: '<SQL user name>'
SqlPassword: '<SQL user password>'
DacpacFile: '<Location of Dacpac file in $(Build.SourcesDirectory) after compilation>'
Дополнительные действия SQL
Задача развертывания Dacpac в SQL Azure может не полностью охватывать все действия, которые необходимо выполнить в SQL Server. В таких случаях можно использовать скрипты PowerShell или командной строки для выполнения необходимых команд.
В этом разделе рассматриваются распространенные варианты использования для вызова инструмента SqlPackage.exe. Перед запуском этого средства убедитесь, что вы используете автономный агент с установленным средством.
Примечание.
При выполнении SQLPackage из папки, в которой она установлена, необходимо префиксировать путь с &
и заключить его в двойные кавычки.
Базовый синтаксис
<Path of SQLPackage.exe> <Arguments to SQLPackage.exe>
Вы можете использовать любой из следующих скриптов SQL на основе действия, которое вы хотите выполнить:
Создает файл дампа базы данных (.dacpac) с работающего сервера SQL или базы данных Microsoft Azure SQL.
Синтаксис команды:
SqlPackage.exe /TargetFile:"<Target location of dacpac file>" /Action:Extract
/SourceServerName:"<ServerName>.database.windows.net"
/SourceDatabaseName:"<DatabaseName>" /SourceUser:"<Username>" /SourcePassword:"<Password>"
или
SqlPackage.exe /action:Extract /tf:"<Target location of dacpac file>"
/SourceConnectionString:"Data Source=ServerName;Initial Catalog=DatabaseName;Integrated Security=SSPI;Persist Security Info=False;"
Пример:
SqlPackage.exe /TargetFile:"C:\temp\test.dacpac" /Action:Extract /SourceServerName:"DemoSqlServer.database.windows.net.placeholder"
/SourceDatabaseName:"Testdb" /SourceUser:"ajay" /SourcePassword:"SQLPassword"
Справка
sqlpackage.exe /Action:Extract /?