2015-11-12 102 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'命令的步驟,該步驟捕獲版本並將其保存在變量中或在其他地方打印,以供腳本稍後使用。