如何在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
相关产品推荐
相关产品推荐

