Jenkins 数据库还原配置
导出数据库备份文件
# 通过 pg_dump 导出数据库
# -Fc 导出 dump 文件,这样文件比较小
# -c --if_exists 清理旧库相关的表
# -v 显示导出信息
# -W 需要输入密码
pg_dump -U user -d db --if-exists -c -Fc -vW > d:\db.dump
配置参数
- dbHost
- 默认值:192.168.1.178
- 备注:数据库文件名,相对git根目录的文件相对路径
- dbName
- 默认值:db
- 备注:数据库文件名,相对git根目录的文件相对路径
- dbUser
- 默认值:user
- 备注:数据库文件名,相对git根目录的文件相对路径
- dbPwd
- 默认值:password
- 备注:数据库文件名,相对git根目录的文件相对路径
- dbFile
- 默认值:db.dump
- 备注:数据库文件名,相对git根目录的文件相对路径
通过git中转dump文件
配置git获取dump文件,添加过滤条件,获取指定dump文件
构建
Execute shell
# 写入密码配置
pgpass=/var/lib/jenkins/.pgpass
# 删除数据库旧密码配置
sed -i "/${dbUser}:${dbPwd}/d" ${pgpass}
# 重新添加源数据库密码配置
echo "*:*:*:${dbUser}:${dbPwd}" >> ${pgpass}
# 修改密码文件权限
chmod 600 ${pgpass}
# 数据库还原
# 获取文件后缀
fileType=${dbFile##*.}
# 文件后缀转小写
fileType=${fileType,,}
if [ "${dbFile##*.}" = "dump" ]; then
#psql -h ${dbHost} -d ${dbName} -U ${dbUser} --command="SELECT pg_terminate_backend ( pg_stat_activity.pid ) FROM pg_stat_activity WHERE datname = '${dbName}' AND pid <> pg_backend_pid()"
#dropdb -h ${dbHost} -U ${dbUser} ${dbName}
#createdb -h ${dbHost} -U ${dbUser} -T template0 ${dbName}
# 忽略错误,避免旧库有新库不存在的表等情况导致的错误
set +e
pg_restore -d ${dbName} ${dbFile} -U ${dbUser} -h ${dbHost} -w -v -c -O
else
# 清理数据库,旧库可能存在新库中不存在的表,导致无法删除schema重新创建新库
sh /var/lib/jenkins/bash/drop_tables.sh ${dbUser} ${dbPwd} ${dbHost} ${dbName}
psql -d ${dbName} -U ${dbUser} -h ${dbHost} -f ${dbFile}
fi
exit 0
评论区