通过 Jenkins shell 运行 Flyway 迁移不会运行给定位置上可用的所有版本文件

问题描述 投票:0回答:1

我有一个 Jenkins 管道,它有一个用于运行 Flyway 迁移的 shell。运行 Flyway 迁移的 shell 行如下所示:

$(${FLYWAY_PATH} migrate -url=jdbc:postgresql://${RDS_HOST}/${RDS_DB} -user=deployer -password=${DEPLOYER_INFO} -table=${FLYWAY_TABLE} -locations=filesystem:./${FLYWAY_SOURCE} -createSchemas=true -baselineOnMigrate=true -schemas=${FLYWAY_SCHEMA} -placeholders.db_schema=${FLYWAY_SCHEMA} -placeholders.db_user_pw=${FLYWAY_PLACEHOLDER} -placeholders.db_create_named_user=${FLYWAY_CREATE_USERS} -placeholders.deployer_pwd=${DEPLOYER_INFO} -validateMigrationNaming=true)

翻译过来类似于:

/usr/local/bin/flyway migrate -url=jdbc:postgresql://vbs.us-east-1.rds.amazonaws.com/finalp -user=deployer -password=Tqj -table=flyway_schema_history -locations=filesystem:./files/schema -createSchemas=true -baselineOnMigrate=true -schemas=_194_jenkins_beta -placeholders.db_schema=_194_jenkins_beta -placeholders.db_user_pw=3HVB -placeholders.db_create_named_user=true -placeholders.deployer_pwd=vTqj

如果我直接在服务器上运行上面的行,效果很好,所有文件都被使用:

Migrating schema "_194_jenkins_beta" to version "001.01.00 - transfer ownership"
WARNING: DB: role "role_dba" already exists, skipping (SQL State: 42710 - Error Code: 0)
WARNING: DB: role "deployer" already exists, skipping (SQL State: 42710 - Error Code: 0)
WARNING: DB: no privileges were granted for "finalp" (SQL State: 01007 - Error Code: 0)
DB: role "deployer" is already a member of role "role_dba"
Migrating schema "_194_jenkins_beta" to version "001.01.01 - records"
Migrating schema "_194_jenkins_beta" to version "001.01.02 - etl"
Migrating schema "_194_jenkins_beta" to version "001.01.03 - data"
Migrating schema "_194_jenkins_beta" to version "001.02.00 - alert author day etl"
Migrating schema "_194_jenkins_beta" to version "001.02.01 - alert dismissreason etl"
Migrating schema "_194_jenkins_beta" with repeatable migration "50 author group rule"
Migrating schema "_194_jenkins_beta" with repeatable migration "50 group rules"

但是当我在 Jenkins 中运行管道时,它不会运行所有版本文件:

Migrating schema "_194_jenkins_beta" to version "001.01.00 - transfer ownership"
WARNING: DB: role "role_dba" already exists, skipping (SQL State: 42710 - Error Code: 0)
WARNING: DB: role "deployer" already exists, skipping (SQL State: 42710 - Error Code: 0)
WARNING: DB: no privileges were granted for "finalp" (SQL State: 01007 - Error Code: 0)
DB: role "deployer" is already a member of role "role_dba"
Migrating schema "_194_jenkins_beta" with repeatable migration "50 author group rules"
Caused by: Migration R__50_group_rules.sql failed
15:54:29  ---------------------------------------------------------------
15:54:29  SQL State  : 42703
15:54:29  Error Code : 0
15:54:29  Message    : ERROR: column f.last_alert_groups does not exist

这是正确的,因为该列是在版本文件“001.02.00”上添加的,所以基本上省略了以下文件:

  • 将架构“_194_jenkins_beta”迁移到版本“001.01.01 - 记录”
  • 将架构“_194_jenkins_beta”迁移到版本“001.01.02 - etl”
  • 将架构“_194_jenkins_beta”迁移到版本“001.01.03 - 数据”
  • 将架构“_194_jenkins_beta”迁移到版本“001.02.00 - 提醒作者日等”
  • 将架构“_194_jenkins_beta”迁移到版本“001.02.01 - 警报解雇原因等”

备注:

  1. 我正在打印 Jenkins 中执行的命令,并在 Jenkins 节点上使用该字符串来手动运行它。手动工作,来自 Jenkins 的上述文件丢失了。
  2. 我从与 Jenkins 完全相同的位置手动运行该命令,有相同的文件可用,因此没有空间容纳“丢失”文件,因为两种技术都使用相同的源。
  3. 唯一有趣的是,我在 ./files/schema/tables 中拥有所有版本化文件,除了位于 ./files/schema/scripts 上的一个“001.01.00”,但手动运行时一切看起来都很好,我认为这不会影响 Jenkins shell 的执行。
  4. 我知道有一个Flyway插件,但我不允许安装它,管理员也犹豫是否要安装它,因为他们有太多东西,添加插件意味着他们需要进行大量测试。

知道为什么会发生这种情况以及可能的解决方法吗?

我希望从 Jenkins 执行所有版本 (V) 文件,因为它们是在手动调整相同命令时完成的。

谢谢你。

jenkins-pipeline flyway
1个回答
0
投票

看起来如果我在 Jenkins 中添加 -target 工作 - 这不是一个理想的解决方案,但我现在可以继续。无论哪种方式,看到不同的行为都非常有趣......

© www.soinside.com 2019 - 2024. All rights reserved.