首页 > 解决方案 > Azure DevOps 如何运行 exe 数据库迁移

问题描述

我们将流利的迁移器包装在一个 .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 任务

在此处输入图像描述

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

标签: powershelldevopsexe

解决方案


在找到这篇文章https://rajbos.github.io/blog/2019/08/17/AzureDevOps-Run-NET-Core后,我得到了这个工作。

解决方案是这个 PowerShell 任务,这个内联脚本。请注意,因为这是一个 .net 核心控制台应用程序,我可以在 .dll 上运行 dotnet 而不必使用 .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 中不断变化(这是预期的)。我从来没有让天蓝色的防火墙脚本工作,它都是围绕 Get-AzureRmSqlServerFirewallRule 或其他 Get-AzureSqlDatabaseServerFirewallRule 的,这是一种非常痛苦的方法,但从未奏效。

后来我偶然发现了 azure 数据库具有防火墙设置的解决方案(我知道我可以手动添加)。有一个允许 Azure 服务资源访问此服务器的开关。最后,将其设置为Yes使一切正常。

在此处输入图像描述


推荐阅读