Liquibase 在单个 Maven 构建中多次执行变更集
Liquibase executes changeset several times in single Maven build
当我在 TeamCity 构建代理上 运行 简单的 Maven 项目时,我观察到一些奇怪的 Liquibase 行为。
Maven 项目结构:
changelogs/
databaseChangeLog.xml
pom.xml
运行 命令:mvn liquibase:update
databaseChangeLogs.xml 包含下一行:<includeAll path="changelogs/"/>
但是构建日志包含重复记录:
liquibase: databaseChangeLog.xml: /home/teamcity/BuildAgent/work/28fe713da351c06d/changelogs/1.xml: ChangeSet /home/teamcity/BuildAgent/work/28fe713da351c06d/changelogs/1.xml ran successfully in 40ms
liquibase: databaseChangeLog.xml: Custom SQL executed
liquibase: databaseChangeLog.xml: changelogs/1.xml: ChangeSet changelogs/1.xml ran successfully in 36ms
所以 Liquibase 似乎从不同的位置获取了两次变更集:从构建代理的构建文件夹和项目的根目录。
有人遇到同样的问题吗?
有什么解决办法吗?
Liquibase 有一个设计缺陷,乍一看 "identical" 更改集是不同的。要绕过这种特性,您可以在 databaseChangeLog
标签或每个 changeSet
标签上使用 logicalFilePath
属性。这将为您的更改集添加另一级别的身份和唯一性。
当我在 TeamCity 构建代理上 运行 简单的 Maven 项目时,我观察到一些奇怪的 Liquibase 行为。
Maven 项目结构:
changelogs/
databaseChangeLog.xml
pom.xml
运行 命令:mvn liquibase:update
databaseChangeLogs.xml 包含下一行:<includeAll path="changelogs/"/>
但是构建日志包含重复记录:
liquibase: databaseChangeLog.xml: /home/teamcity/BuildAgent/work/28fe713da351c06d/changelogs/1.xml: ChangeSet /home/teamcity/BuildAgent/work/28fe713da351c06d/changelogs/1.xml ran successfully in 40ms
liquibase: databaseChangeLog.xml: Custom SQL executed
liquibase: databaseChangeLog.xml: changelogs/1.xml: ChangeSet changelogs/1.xml ran successfully in 36ms
所以 Liquibase 似乎从不同的位置获取了两次变更集:从构建代理的构建文件夹和项目的根目录。
有人遇到同样的问题吗? 有什么解决办法吗?
Liquibase 有一个设计缺陷,乍一看 "identical" 更改集是不同的。要绕过这种特性,您可以在 databaseChangeLog
标签或每个 changeSet
标签上使用 logicalFilePath
属性。这将为您的更改集添加另一级别的身份和唯一性。