powershell - 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 任务
如果有人可以提供一些帮助,将不胜感激
解决方案
在找到这篇文章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使一切正常。
推荐阅读
- pandas - 熊猫安全地将列分开(零,无,str)
- java - Selenium 驱动程序 - 处理通过 JavaScript 打开的浏览器窗口
- qt - Qt QML如何通过双击手动选择TextArea中的单词
- java - 使用 PowerMock 模拟在被测类的构造函数中调用的私有方法
- gruntjs - Azure DevOps Pipeline Grunt 任务未采用 WorkingDirectory 输入
- javascript - 如何在javascript的每次迭代中以随机间隔运行setTimeout()?
- javascript - 如何将粘性 div 保持在固定标题下方
- css - 我是量角器的新手。根据我的公司政策,我无法使用 xpath,我正在努力使用以下代码。我非常感谢您的回复
- python - 如何在处理 ctrl-C 事件时访问局部变量?
- javascript - 自动完成“偏移”可选参数不适用于自动完成