2015-11-12 3 views
2

Я хотел бы получить последнее значение версии схемы для конкретной базы данных с помощью 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, мне нужно использовать это, чтобы сравнить версию с другим значением, чтобы убедиться, что они соответствуют сценарию оболочки. Я подумал о том, чтобы выскочить на выходе, но хотел знать, есть ли у Flyway скрытая функция, чтобы сделать это в своем приложении. Тем не менее, я был бы очень благодарен, если бы вы могли поделиться кодом Powershell, спасибо. – Leroy

ответ

4

Я недавно пришлось решать именно эту проблему при строительстве пролетного пути плагин для Octopus Deploy. (В настоящее время ждет, чтобы быть объединены):

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

Если есть способ вернуть только номер версии я не мог найти его. Вместо этого я сделал так, как предложил Дэвид Аткинсон и скрепил «migrate info», чтобы найти номер версии.

Следующие 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.

Обратные вызовы позволяют подключаться к жизненному циклу Flyway в соответствии с official doc, используя обратные вызовы SQL или Java.

В вашем случае можно определить обратный вызов на командном этапе 'afterInfo', который ловит эту версию и поддерживает ее внутри переменной или печатает ее в другом месте, которая будет использоваться позже вашим скриптом.

Смежные вопросы