You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Liquibase中获取上一个标签?Gradle流水线回滚需求

Liquibase回滚:流水线中获取上一个标签的方法

一、标签的来源

  • Liquibase的标签都存在数据库自动维护的databasechangelog表里,表的TAG字段会记录所有已打的标签。
  • 你也可以在Git这类版本控制系统里同步维护标签清单,和Liquibase的标签保持一致,这样也能直接从Git里拉取历史标签。

二、流水线中获取上一个标签的两种方式

1. 直接查数据库

通过SQL查询databasechangelog表,按执行时间倒序取倒数第二个标签(最新的是当前刚打的,上一个就是倒数第二个):

SELECT TAG FROM databasechangelog WHERE TAG IS NOT NULL ORDER BY DATEEXECUTED DESC, ORDEREXECUTED DESC LIMIT 1 OFFSET 1;

在流水线里可以把查询结果存成环境变量,比如用bash:

# 假设用PostgreSQL,其他数据库调整客户端命令即可
PREVIOUS_TAG=$(psql -h $DB_HOST_URL -U $DB_USERNAME -d $DB_NAME -t -c "SELECT TAG FROM databasechangelog WHERE TAG IS NOT NULL ORDER BY DATEEXECUTED DESC, ORDEREXECUTED DESC LIMIT 1 OFFSET 1;")
PREVIOUS_TAG=$(echo $PREVIOUS_TAG | xargs) # 去除多余空格

2. 用Liquibase的history命令提取

直接调用Gradle的Liquibasehistory命令输出操作历史,再用文本工具过滤出上一个标签:

# 执行history命令,过滤标签行,提取倒数第二个标签
PREVIOUS_TAG=$(./gradlew -Ddb_url=$DB_HOST_URL -Ddb_username=$DB_USERNAME -Ddb_password=$DB_PASSWORD history -PrunList=main | grep "Tag:" | awk '{print $2}' | tail -n 2 | head -n 1)

三、回滚到上一个标签的命令

拿到标签后,执行Liquibase的回滚命令即可:

./gradlew -Ddb_url=$DB_HOST_URL -Ddb_username=$DB_USERNAME -Ddb_password=$DB_PASSWORD rollback -PrunList=main -Pliquibase.command.tag=$PREVIOUS_TAG

内容的提问来源于stack exchange,提问作者Priyanka Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 16:06:28