2015-11-12 35 views
2

我想使用Flyway获取特定数据库的最新架构版本值。 Flyway中是否有函数在命令行中获取当前模式版本号?Flyway迁移架构版本

我可以运行下面的命令:

flyway info 

这让我对我的数据库(缩短)的整个模式内容如下:

+----------------+-------------------------------------+---------------------+---------+ 
| Version  | Description       | Installed on  | State | 
+----------------+-------------------------------------+---------------------+---------+ 
| 1.0.1   | Create Table TRACKPATH    | 2015-11-10 08:39:36 | Success | 
| 1.0.2   | Create Table TRACKGAUGE    | 2015-11-10 08:39:36 | Success | 
| ...   | ...         | ...     | ...  | 
| 1.5.7   | Create Table FUNCTIONAL SITE  | 2015-11-10 08:40:10 | Success | 
| 1.5.8   | Create Table TOPOGRAPHY AREA  | 2015-11-10 08:40:10 | Success | 
| 1.5.9   | Create Table FS DETAILDEFD   | 2015-11-10 08:40:11 | Success | 
+----------------+-------------------------------------+---------------------+---------+ 

我只是在最后的模式条目感兴趣版本'1.5.9'的值。

我的环境如下:

  • Windows 7的
  • 迁飞3.0
+0

为什么你需要这个?可以从命令行输出中删除它。如果这有帮助,我可以分享一些代码在Powershell中执行此操作? –

+1

嗨@DavidAtkinson,我需要使用它来比较版本与另一个值,以确保它们在shell脚本内匹配。我曾经想过抓取输出,但想知道Flyway是否有隐藏功能在其应用程序中执行此功能。但是,如果您可以共享Powershell代码,我将非常感激,谢谢。 – Leroy

回答

4

我最近正好解决了这个问题,同时建立飞路插件八达通部署。 (目前等待被合并):

https://github.com/OctopusDeploy/Library/pull/244

如果有一种方法可以只返回版本号我找不到它。相反,我是按照David Atkinson的建议,通过“迁移信息”来找到版本号。

以下PowerShell适合我。让我知道它是否可以解决您的问题。 (和是的,有可能是更好的方法来做到这一点比尤伯杯行占有重要的逻辑!)

# Saving target DB info 
$flywayCmd = "C:\path\to\flyway.cmd" 
$arguments = @(
    "info", 
    "-url=$targetUrl", 
    "-user=$targetUser", 
    "-password=$targetPassword" 
) 
Write-Host "Determining version of target database:" 
Write-Host "Executing the following: & $flywayCmd $arguments" 
$targetDbInfo = & $flywayCmd $arguments 
Write-Host "Target DB info:" 
Write-Host $targetDbInfo 

# Finding intended version number of target database 
$targetDbVersion = ($targetDbInfo | ? {$_.StartsWith("|") } | ? { $_ -notcontains "No migrations found" } | % { $parts = $_.Split('|'); New-Object PSObject -Property @{Version = $parts[1].Trim(); State = $parts[4].Trim()}} | ? { $_.State -eq "Success" } | Select-Object -Last 1).Version 
Write-Host "Target database is at version $targetDbVersion" 
+0

我想你已经为我提供了明确的答案,似乎没有(隐含的)方式使用Flyway获取当前版本号,它看起来像刮抢似乎是最简单可行的选项,谢谢 – Leroy

+0

@Leroy我建议您在GitHub问题跟踪器上提交功能请求。 –

0

除了由@Alex耶茨提供的答案,有可能是另一种方式,通过拜Flyway提供的回调概念。

回调允许您根据official doc使用SQL或Java回调钩入Flyway的生命周期。

对于您的情况,可以定义一个回调到'afterInfo'命令的步骤,该步骤捕获版本并将其保存在变量中或在其他地方打印,以供脚本稍后使用。