前几天,我们有一个飞行路线迁移作为我们的詹金斯工作失败了。当我们查看数据库时,我们发现脚本已应用,但在脚本的“schema_version”表中没有创建任何条目。我们知道这个脚本需要花费很长时间才能应用(修改一个大约70M行的表),并且我们使用的SQL语法至少会使更改无阻塞(在mysql上ALGORITHM = INPLACE)。然而,当脚本完成后,flyway返回时没有jenkins,并且在这个漫长的脚本之后没有运行任何脚本。
我们通过gradle插件(版本3.2.1)运行flyway并使用ansible调用gradle任务。詹金斯打电话给ansible,叫做gradle,叫做飞路。不确定这是否是由飞路超时或安全引起的。我们希望不会在生产中再次发生这种情况。
我们的解决方法是手动将条目放入schema_version,以便不会重新运行脚本,然后重新应用迁移,以便脚本运行后运行。
我们查看了db并且同时出现了巧合的连接峰值,所以可能会遇到连接限制,但我认为如果它正在运行脚本,连接就已经打开了。
詹金斯的消毒输出如下:
TASK: [flyway | run flywayMigrate] ********************************************
<db.server> REMOTE_MODULE command gradle -b /opt/product/rc/flyway-17.5.32.37534.d2bac4a/extracted/flyway.gradle flywayMigrate
failed: [db.server] => {"failed": true, "parsed": false}
invalid output was: SUDO-SUCCESS-plqsdlxwlfkdsujlxdafldpasvtllis
答案 0 :(得分:0)
这很可能是由于Flyway用于元数据表的连接被基础设施的某些部分(DB,代理等)关闭,导致Flyway无法在长时间后将行写入表中 - 完成了迁移。