Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Liquibase CLI在Git push上更新PostgreSQL数据库_Postgresql_Liquibase - Fatal编程技术网

使用Liquibase CLI在Git push上更新PostgreSQL数据库

使用Liquibase CLI在Git push上更新PostgreSQL数据库,postgresql,liquibase,Postgresql,Liquibase,我正在研究使用Liquibase来管理PostgreSQL表和函数的更新。我没有集成到Java应用程序中,所以我使用的是“独立的”,这意味着在SQL文件中定义一个变更集,并使用Liquibase CLI执行它。有没有一种方法可以使事情自动化,这样当我将changelog.sql文件签入Git时,Liquibase可以针对我想要的数据库执行它 如果这不可能,我只需手动使用CLI即可。Liquibase本身没有类似的功能。我建议您考虑一下自动化这个过程 这是可以做到的,但是您需要一个maven构建服

我正在研究使用Liquibase来管理PostgreSQL表和函数的更新。我没有集成到Java应用程序中,所以我使用的是“独立的”,这意味着在SQL文件中定义一个变更集,并使用Liquibase CLI执行它。有没有一种方法可以使事情自动化,这样当我将changelog.sql文件签入Git时,Liquibase可以针对我想要的数据库执行它


如果这不可能,我只需手动使用CLI即可。Liquibase本身没有类似的功能。我建议您考虑一下自动化这个过程

这是可以做到的,但是您需要一个maven构建服务器来执行更新

我会这样做:

  • 使用maven将项目配置为伪java应用程序。你需要一个pom文件。下面的例子
  • 设置可以运行maven构建的构建服务器。您可以找到一个有能力的服务器列表
  • 在Git push上设置一个web钩子,告诉构建服务器获取更新的脚本和构建。如果您使用的是Github,请参阅说明
  • 配置构建服务器以运行maven目标“liquibase:update”
示例pom文件(根据需要调整):

<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
  • 下载
    postgresql-X.X-XXX.jdbc3.jar
    文件,并将其放入liquibase文件夹中的
    lib
    文件夹中。这使得它可以在全球范围内进行液化
当你做某事时跑步
  • 打开git控制的项目文件夹并导航到文件夹
    .git/hooks
    。根据您的git风格,这里可能已经有一些文件了。你可以在网上阅读更多关于这项工作的信息:
  • 创建一个空文本文件,并将其命名为
    post-commit
  • 添加以下内容(假设您正在使用git for windows或git on linux-我不确定它是否适用于所有git实现)
笔记 这将在每次提交时运行。如果您使用的远程Git服务器如GITHUB/BITKORD考虑<代码>预推<代码>而不是<代码> POST提交

这可能需要一些技巧。 *我在本例中使用的是xml文件 *这是根据我用于MySQL的内容改编的,因此可能需要更改JDBCURL

潜在的改进 检查提交的文件,仅当存在.sql文件时,才运行liquibase

    #!/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