【问题标题】:How do I get the Flyway version number of a database如何获取数据库的 Flyway 版本号
【发布时间】:2018-06-22 03:59:54
【问题描述】:

我想提取我的生产数据库的预部署 Flyway 版本号,以便我可以在我的持续部署管道 (Jenkins) 中使用它,以防我稍后进行回滚。

我怎样才能做到这一点?

一种选择是查询飞行路线历史表,但我无法找到实现此目的的故障安全方法。

【问题讨论】:

  • 到目前为止您尝试过什么? flyway info 也许?
  • 我已经尝试了所有的命令行参数。信息是我希望找到的地方,但这只是显示可用的迁移。它确实显示了版本号,从技术上讲,它可以通过心理解析表格来解决,但不适合以编程方式获取值。
  • 我同意这可能更容易,但只要你不允许乱序迁移,那么它应该是状态成功的最后一行,不是吗?跨度>
  • 是的,所以在我开始使用撤消迁移之前我一直在想,这会使表格变得混乱,以至于很难获得我需要的信息。有趣的是,有一些命令(如撤消和迁移)会显示版本。问题是我不想执行这些命令。我只想要版本。我想这可能最终成为 info 命令的功能请求。

标签: jenkins flyway


【解决方案1】:

我已经制定了一个答案,虽然它感觉像是一个很大的 hack。我在 migrate 中运行 --dryRunOutput 作为一种让 flyway 将版本号输出到屏幕的方法,因为 info 出于某种原因不会这样做。

我将输出读入一个文件(因为 DOS 很难通过管道传输或传递给一个变量),然后隔离以“Current”开头的输出行。然后我使用 : 作为我的分隔符选择第二个标记。可能有一种更简单的方法,我希望我可以使用飞行路线信息而不是迁移,因为我的方法感觉很老套,但至少现在可以。

flyway -dryRunOutput=test.sql migrate | FIND "Current" >currentversion.txt
for /f "delims=" %%x in (currentversion.txt) do set CURRENTVERSIONLINE=%%x
for /f "tokens=1,2 delims=:" %%a in ("%CURRENTVERSIONLINE%") do set CURRENTVERSION=%%b
echo Version  : %CURRENTVERSION%

【讨论】:

    【解决方案2】:

    以下单线可以满足您的需求:

    flyway info | grep Success | tail -1 | cut -f3 "-d|" | xargs

    【讨论】:

    • 如果我已经完成了(“成功”)撤消操作,则不确定这是否有效,因为它会选择这一行。
    • 是被标记为成功的撤消脚本导致误报,而不是撤消。
    猜你喜欢
    • 2019-12-24
    • 2018-10-06
    • 2013-11-27
    • 1970-01-01
    • 2018-01-18
    • 2021-08-25
    • 2012-07-01
    • 1970-01-01
    • 2017-10-19
    相关资源
    最近更新 更多