有人可以为我提供用于dbUP迁移的powershell示例吗?



我已经为.net core 2.0中的databse迁移创建了一个控制台应用程序。它运行良好,但现在我想在 jenkins 中使用 CI/CD 进行迁移。有人可以指导我一样。如果可能的话,PowerShell运行.NET Core控制台应用程序的示例会很棒。

因此,当我搜索为我的 CI 流程(即 TeamCity 和 Octopus Deploy(做同样的事情时,我发现了这个问题,并认为我会添加一个答案来提供帮助,希望人们将来不会像我那样浪费那么多时间。

我有一个 .NET Core 2.1 应用程序,它基本上以阅读文档页面上列出的方式使用 DbUp,然后使用以下命令构建:

dotnet.exe publish DbUpDemoDbUpDemo.csproj --configuration Release

因为我没有进行自包含部署,所以我没有指定运行时,这意味着不会创建 exe,而是我们需要通过 dll 运行应用程序。

发布结果被压缩(在我的情况下使用 octo(,然后发布到服务器。

若要使用 powershell 运行 DbUp,需要在脚本文件(.ps1 扩展名(中使用以下行:

$dbUpDllPath = "DbUpDemo.dll";
$dotNetCommand = "dotnet " + $dbUpDllPath;
iex $dotNetCommand

这假定脚本从与 dll 相同的目录运行:如果脚本与 dll 位于不同的文件夹中,则可以在 $dbUpDllPath 中设置完整路径(例如,如果您已将已发布的文件夹提取到 c:\temp\DbUpDemo 中,您将使用 $dbUpDllPath = "c:\temp\DbUpDemo\DbUpDemo.dll";)

您可以将此脚本添加到源代码管理中,并确保在发布期间包含它(我没有这样做,因为我在将代码发布到服务器后在 Octopus 中使用运行脚本步骤(

需要注意的几点:

如果在发布期间未指定运行时,则需要确保在服务器上安装了相应的 .NET 核心运行时。

您可能需要小心注入配置的方式: 我使用以下代码从 appsettings.json 文件中获取连接字符串:

IConfiguration config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", true, true)
.Build();
string connectionString = config.GetConnectionString("DatabaseToUpdate");

这取决于当前目录中存在的appsettings.json文件,我发现如果脚本不包含在与dll和json文件相同的文件夹中,则将无法正常工作。一种方法是在执行之前设置脚本的位置

Set-Location "c:tempDbUpDemo";
$dbUpDllPath = "DbUpDemo.dll";
$dotNetCommand = "dotnet " + $dbUpDllPath;
iex $dotNetCommand

或者,可以将连接字符串作为参数传递给 dotnet 命令。


对于八达通特定用户,如果您使用的是运行脚本步骤,则可以使用以下脚本:

Set-Location $OctopusParameters['InstallationDirectory'];
Get-Location | Write-Host
$dbUpDllPath = $OctopusParameters['InstallationDirectory'] + "DbUpDemo.dll";
dotnet $dbUpDllPath | Write-Host

需要注意的是,可以直接调用dotnet命令,而不必将其包装在调用命令中:我发现使用我的设置章鱼不能很好地使用invoke命令(错误:术语"dotnet c:\temp\DbUpDemo\DbUpDemo.dll"无法识别为cmdlet,函数,脚本文件的名称, 或可操作的程序。检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试。但是直接调用 dotnet 命令(而不是将其包装在调用中(是一种魅力。

另外一个旁注:在示例中,我使用了一个名为 InstallationDirectory 的 Octopus 变量,该变量由此运行脚本步骤和上一步(即部署包步骤(使用。

相关内容

  • 没有找到相关文章

最新更新