所以我能够直接从我的机器上运行liquidbase更新,它们将成功运行,但是当通过aws代码构建运行时,它们将失败,在检查日志后,我发现这个错误是导致失败的原因,当我运行update或changeLogSync
liquibase.exception.CommandExecutionException: liquibase.exception.LiquibaseException: Unexpected error running Liquibase: ERROR: current transaction is aborted, commands ignored until end of transaction block [Failed SQL: (0) CREATE TABLE DATABASECHANGELOGLOCK (ID INT NOT NULL, LOCKED BOOLEAN NOT NULL, LOCKGRANTED datetime, LOCKEDBY VARCHAR(255), CONSTRAINT PK_DATABASECHANGELOGLOCK PRIMARY KEY (ID))]
我怀疑这个语句失败是因为这个表已经存在。我通过在集群上查询
表来验证这一点。select * from databasechangeloglock;
id | locked | lockgranted | lockedby
----+--------+-------------+----------
1 | f | |
(1 row)
我通过启动一个新的EC2盒并仅安装所需的驱动程序,扩展和liquidbase客户端来设置一个干净的环境,并且这个更新再次成功运行。Liquibase似乎只希望在通过代码构建运行时创建DATABASECHANGELOGLOCK。
我有codefresh ci/cd管道与liquibase docker映像(4.21.1)的确切错误。对我来说,解决办法是在运行之前将驱动程序从我的repo复制到liquibase安装位置/liquibase/internal/lib
(根据您的环境可能不同)的lib文件夹中liquibase update
.