我有一个 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”上添加的,所以基本上省略了以下文件:
备注:
知道为什么会发生这种情况以及可能的解决方法吗?
我希望从 Jenkins 执行所有版本 (V) 文件,因为它们是在手动调整相同命令时完成的。
谢谢你。
看起来如果我在 Jenkins 中添加 -target 工作 - 这不是一个理想的解决方案,但我现在可以继续。无论哪种方式,看到不同的行为都非常有趣......