Azure DevOps как запустить миграцию базы данных exe

#powershell #devops #exe

#powershell #devops #exe

Вопрос:

У нас есть fluent migrator, завернутый в консольное приложение .net core, к которому мы добавили дополнительные функциональные возможности. Мы работали над развертыванием octopus, но попытка заставить его работать в конвейере выпуска Azure DevOps оказалась очень сложной.

У нас есть файл powershell Deploy.ps1 с одной командой в нем, которая выглядит следующим образом

 amp; .Migrations.exe -connectionStrings "Server=<server>,1433;Initial Catalog=MigrationTest-Dev;Persist Security Info=False;User ID=<name>;<password>;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
 

Это работает нормально локально и, как я уже сказал, в нашем окне octopus.

Как я смогу запустить это в конвейере выпуска devops, я могу только думать, что это может быть связано с разрешением !?

Ниже приведена текущая задача Powershell в конвейере выпуска

введите описание изображения здесь

Если кто-нибудь может оказать некоторую помощь, мы будем очень признательны

Комментарии:

1. Где находится файл YAML? необходимо добавить доверенный хост, следующим шагом в конвейере является настройка задачи PowerShell для запуска файла команды или сценария на целевой машине

2. Смотрите ответ ниже. Возможно, я пошел по неверному пути, пытаясь использовать powershell для открытия брандмауэра базы данных, но это легко сделать с помощью запутанных результатов поиска ответа.

Ответ №1:

Я получил эту работу после нахождения этого сообщения https://rajbos.github.io/blog/2019/08/17/AzureDevOps-Run-NET-Core .

Решением была эта задача PowerShell, для которой этот встроенный скрипт. Обратите внимание, что, поскольку это консольное приложение .net core, я мог бы запустить dotnet на .dll и не нужно использовать .exe

 cd "$(System.DefaultWorkingDirectory)/_SqlMigrationsTest/Migrations-Wip/Migrations"

dotnet Migrations.dll -connectionStrings "Server=<server>;Initial Catalog=MigrationTest-Dev;Persist Security Info=False;User ID=<name>;Password=<password>;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
 

введите описание изображения здесь

Yaml выглядел так, если я щелкнул ссылку Просмотреть YAML.

 steps:
- powershell: |
   cd "$(System.DefaultWorkingDirectory)/_SqlMigrationsTest/Migrations-Wip/Migrations"
   
   dotnet Migrations.dll -connectionStrings "Server=<server>;Initial Catalog=MigrationTest-Dev;Persist Security Info=False;User ID=<name>;Password=<password>;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
  displayName: 'Run Migration'
 

Итак, это сработало, но затем у меня возникла проблема с правилами брандмауэра базы данных Azure, я потратил день на изучение сценария powershell для подключения к базе данных и добавления нового правила брандмауэра. IP-адрес постоянно меняется в DevOps (что и ожидалось). Я никогда не заставлял работать сценарии брандмауэра Azure, все было вокруг Get-AzureRmSqlServerFirewallRule или другого Get-AzureSqlDatabaseServerFirewallRule, что было очень болезненным подходом, который никогда не работал.

Позже я наткнулся на решение, в котором в базе данных Azure есть настройки брандмауэра (которые, как я знал, я мог добавить вручную). Существует переключатель, позволяющий ресурсам служб Azure получать доступ к этому серверу. Наконец-то все заработало, поставив это на «Да«.

введите описание изображения здесь