使用Liquibase CLI在Git push上更新PostgreSQL数据库
我正在研究使用Liquibase来管理PostgreSQL表和函数的更新。我没有集成到Java应用程序中,所以我使用的是“独立的”,这意味着在SQL文件中定义一个变更集,并使用Liquibase CLI执行它。有没有一种方法可以使事情自动化,这样当我将changelog.sql文件签入Git时,Liquibase可以针对我想要的数据库执行它使用Liquibase CLI在Git push上更新PostgreSQL数据库,postgresql,liquibase,Postgresql,Liquibase,我正在研究使用Liquibase来管理PostgreSQL表和函数的更新。我没有集成到Java应用程序中,所以我使用的是“独立的”,这意味着在SQL文件中定义一个变更集,并使用Liquibase CLI执行它。有没有一种方法可以使事情自动化,这样当我将changelog.sql文件签入Git时,Liquibase可以针对我想要的数据库执行它 如果这不可能,我只需手动使用CLI即可。Liquibase本身没有类似的功能。我建议您考虑一下自动化这个过程 这是可以做到的,但是您需要一个maven构建服
如果这不可能,我只需手动使用CLI即可。Liquibase本身没有类似的功能。我建议您考虑一下自动化这个过程 这是可以做到的,但是您需要一个maven构建服务器来执行更新 我会这样做:
- 使用maven将项目配置为伪java应用程序。你需要一个pom文件。下面的例子
- 设置可以运行maven构建的构建服务器。您可以找到一个有能力的服务器列表
- 在Git push上设置一个web钩子,告诉构建服务器获取更新的脚本和构建。如果您使用的是Github,请参阅说明
- 配置构建服务器以运行maven目标“liquibase:update”
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>my-project</artifactId>
<version>1.0</version>
<scm>
<url>https://github.com/{user}/{repository}</url>
<connection>scm:git:https://github.com/{user}/{repository}git</connection>
<developerConnection>scm:git:https://github.com/{user}/{repository}</developerConnection>
<tag>HEAD</tag>
</scm>
<name>My Project</name>
<description>Simlpe pom file to run my liquibase scripts</description>
<properties>
<liquibase-maven-plugin.version>3.5.1</liquibase-maven-plugin.version>
</properties>
<dependencies>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>${liquibase-maven-plugin.version}</version>
<configuration>
<propertyFile>liquibase-maven.properties</propertyFile>
</configuration>
</plugin>
</plugins>
</build>
</project>
changeLogFile=changelog.xml
driver=com.mysql.cj.jdbc.Driver
username=user
password=password
verbose=true
dropFirst=false
url=jdbc:mysql://database-server:3306/schema
databaseChangeLogLockTableName=databasechangeloglock
databaseChangeLogTableName=databasechangelog
我希望这有帮助,这并不是一个让它工作的完整配方,但如果你坚持下去,它应该会让你走上正确的道路
备选方案
如果您真的想使用liquibase CLI,可以编写脚本。例如,设置一个简单的支持CGI的web服务器(Apache),并编写一个脚本,在运行liquibase CLI更新之前从git repo执行拉取操作。然后,您将设置Git web钩子以发出触发更新脚本的请求
事实上,现在我编写了这个替代方案,这可能是上面构建服务器的一个更简单的解决方案。我想这取决于您当前可用的架构,以及您最喜欢的架构。第一个解决方案是关于配置的,这需要编写一个小脚本。这是可行的。我在詹金斯的管道里做了类似的事情 配置液化酶
- 确保已安装liquibase
- 下载
文件,并将其放入liquibase文件夹中的postgresql-X.X-XXX.jdbc3.jar
文件夹中。这使得它可以在全球范围内进行液化lib
- 打开git控制的项目文件夹并导航到文件夹
。根据您的git风格,这里可能已经有一些文件了。你可以在网上阅读更多关于这项工作的信息:.git/hooks
- 创建一个空文本文件,并将其命名为
李>post-commit
- 添加以下内容(假设您正在使用git for windows或git on linux-我不确定它是否适用于所有git实现)
#!/bin/bash
DB_PORT = 6000
SQL_DB_NAME = "mydbName"
PGSQL_USERNAME = "username"
PGSQL_PASSWORD = "password"
/path/to/liquibase --driver=com.mysql.cj.jdbc.Driver --changeLogFile=../resources/database/db.changelog-1.1.xml --url=\"jdbc:postgresql://127.0.0.1:${DB_PORT}/${SQL_DB_NAME}?autoReconnect=true&useSSL=false&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC\" --username=${PGSQL_USERNAME} --password=${PGSQL_PASSWORD} update