Azure DevOps 如何 运行 exe 数据库迁移

Azure DevOps how to run exe database migration

我们将流利的迁移器封装在一个 .net 核心控制台应用程序中,我们向其添加了额外的功能。我们在 octopus 部署上进行了这项工作,但事实证明,试图让它在 azure DevOps 发布管道中工作非常困难。

我们有一个 Deploy.ps1 powershell 文件,其中有一个命令如下

& .\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;"

这 运行 在当地很好,正如我在我们的章鱼盒上所说的那样。

我怎么能在 devops 发布管道中 运行 这个,我只能认为它的权限可能相关!?

下面是发布管道中的当前Powershell任务

如果有人能提供一些帮助,将不胜感激

我在找到这个 post https://rajbos.github.io/blog/2019/08/17/AzureDevOps-Run-NET-Core.

后开始工作

解决方案是这个 PowerShell 任务,这个内联脚本。请注意,因为这是一个 .net 核心控制台应用程序,所以我可以 运行 dotnet on the .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 link.

,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 服务资源访问此服务器 的开关。将其设置为 Yes 终于可以正常工作了。