Docker
Drone构建项目动态覆盖项目配置
Drone构建项目动态覆盖项目配置
最近在开发一个Go项目,由于本地的配置跟线上是不一致的,每次提交上去的时候,都要先把本地的项目配置改成线上的配置,这样操作很麻烦,同时也有可能会泄露数据库,所以打算在Drone构建过程的时候,读取配置进行覆盖,这样就不用每次提交前都要自己手动修改,同时保证一些重要信息不会泄露,下面跟大家分享如何操作。
一、配置项目参数
我们直接到Drone管理后台找到对应项目,将我们的项目参数,我这里是数据库信息,配置到Secrets中,截图如下
二、构建覆盖底层镜像
我们先打一个基础镜像,alpine作为基础镜像,然后安装sed,我们在覆盖配置的时候会用到这个镜像,好处就是体积小,可以提高我们的构建速度,这样我们就不用网上找其他镜像,配置如下
# Dockerfile.modify-config FROM alpine:latest RUN apk add --no-cache sed
然后我们执行以下命令进行生成
docker build -t hongzhuangxian/modify-config .
这样就生成镜像了,然后就是推送到镜像仓库,这里就不赘述。
三、配置覆盖配置
我们在构建的镜像之前,加入这一步,用于获取我们配置信息,并且覆盖,配置如下
#修改数据库配置 - name: modify-config image: hongzhuangxian/modify-config pull: if-not-exists environment: MYSQL_ADDR: # 从Drone的环境变量或者secret中获取值 from_secret: mysql_addr MYSQL_PORT: # 从Drone的环境变量或者secret中获取值 from_secret: mysql_port MYSQL_ROOT: # 从Drone的环境变量或者secret中获取值 from_secret: mysql_root MYSQL_PASSWORD: # 从Drone的环境变量或者secret中获取值 from_secret: mysql_password MYSQL_DATABASE: # 从Drone的环境变量或者secret中获取值 from_secret: mysql_database commands: - sed -i "s/\(conf.MysqlAddr = \).*/\1\"$MYSQL_ADDR\"/" conf/config.go - sed -i "s/\(conf.MysqlPort = \).*/\1\"$MYSQL_PORT\"/" conf/config.go - sed -i "s/\(conf.MysqlRoot = \).*/\1\"$MYSQL_ROOT\"/" conf/config.go - sed -i "s/\(conf.MysqlPassword = \).*/\1\"$MYSQL_PASSWORD\"/" conf/config.go - sed -i "s/\(conf.MysqlDataBase = \).*/\1\"$MYSQL_DATABASE\"/" conf/config.go
这里说明下,我的项目配置是在conf/config.go这个文件下,我这里是匹配conf.MysqlAddr=****替换成conf.MysqlAddr=配置参数,具体替换就要看大家自己的项目了。
以上就是在构建过程中替换项目配置。
0条评论