需求描述
产品开发测试过程中,需要在打包程序代码的同时把数据库表结构和部分表数据同时打包到安装包中。
存在问题及解决方案
使用 pg_dump 导出数据库数据时不能在命令中添加参数,默认只能在执行命令时通过交互式输入密码。这种方式明显不适用于在Jenkins 中自动打包。经查询官方文档得知还可以通过配置pg密码文件的方式设置数据库默认密码。密码文件可以命名为 .pgpass 并保存在用户的主目录下,也可以通过环境变量的方式指定文件名。
由于我是通过 docker 的方式启动的 Jenkins ,所以通过环境变量的方式指定文件名更适合实际应用场景。
配置 postgresql 密码文件
按照官方提示,密码文件格式为:
hostname:port:database:username:password
编辑完文件后把文件放置到项目目录中,命名为 pg.pgpass。
配置 Jenkins环境变量
在 Jenkins 系统管理 》系统配置 》全局属性 添加环境变量
修改导出数据命令
sh "./framework/pgsql/bin/pg_dump -h 192.168.0.81 -U postgres -p 5432 -Fc -s -O test >data/testschema.dump"
sh "./framework/pgsql/bin/pg_dump -h 192.168.0.81 -U postgres -p 5432 -Fc -O -t t_s_config test >data/testdata.dump"
执行构建任务,可以正常导出数据库到文件。