Alk*_*ris 4 liquibase maven-3 maven jenkins
我正在使用liquibase maven plugin通过jenkins自动构建更新数据库更改。
我有这个 pom.xml
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>3.4.2</version>
<dependencies>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.5</version>
</dependency>
</dependencies>
<configuration>
<changeLogFile>${basedir}/src/main/resources/schema.sql</changeLogFile>
<changeLogFile>${basedir}/src/main/resources/data.sql</changeLogFile>
<driver>org.postgresql.Driver</driver>
<url>jdbc:postgresql://${db.url}</url>
<promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
我需要跑schema.sql之前data.sql。当我在本地运行它时,它可以工作。当我通过 jenkins 运行它时,schema changeLogFile第二个执行,所以为了使它工作,我反转了命令。
问题:执行顺序是什么?难道我做错了什么?
该官方目标文件规定,只有一个入口预见:
changeLogFile:
指定用于 Liquibase 的更改日志文件。
- 类型:
java.lang.String- 要求:否
- 表达:
${liquibase.changeLogFile}
您可以添加更多条目,但它们将被忽略并且 maven 不会抱怨:它不验证插件配置的内容,它不能,因为那部分取决于插件并且 maven 不预先知道。也就是说,是通用的。
为了确保确定性顺序并changeLogFile执行两个,您应该指定几个插件executions如下:
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>3.4.2</version>
<dependencies>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.5</version>
</dependency>
</dependencies>
<configuration>
<changeLogFile>${basedir}/src/main/resources/schema.sql</changeLogFile>
<changeLogFile>${basedir}/src/main/resources/data.sql</changeLogFile>
<driver>org.postgresql.Driver</driver>
<url>jdbc:postgresql://${db.url}</url>
<promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
</configuration>
<executions>
<execution>
<id>update-schema</id>
<phase>process-resources</phase>
<goals>
<goal>update</goal>
</goals>
<configuration>
<changeLogFile>${basedir}/src/main/resources/schema.sql</changeLogFile>
</configuration>
</execution>
<execution>
<id>update-data</id>
<phase>process-resources</phase>
<goals>
<goal>update</goal>
</goals>
<configuration>
<changeLogFile>${basedir}/src/main/resources/data.sql</changeLogFile>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
注意:我们为该executions部分之外的所有执行指定一个通用配置,然后每个execution我们只定义附加配置,即每次不同的文件。
确定性顺序由 Maven 保证:对于同一个插件,对于同一个阶段,将遵守 POM 中的声明顺序。
但是,作为process-resources阶段的一部分,此执行现在将成为您构建的一部分,这可能不是您想要的。因此,在这种情况下,最好将其移动到配置文件如下:
<profiles>
<profile>
<id>liquibase-executions</id>
<build>
<defaultGoal>process-resources</defaultGoal>
<plugins>
<!-- MOVE HERE liquibase plugin configuration and executions -->
</plugins>
</build>
</profile>
</profiles>
Run Code Online (Sandbox Code Playgroud)
然后执行以下操作(也根据您的评论):
mvn -Pliquibase-executions -Ddb.url=IP:PORT/DB -Dliquibase.username=USERNAME
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3118 次 |
| 最近记录: |