Drone构建项目动态覆盖项目配置

Drone构建项目动态覆盖项目配置

       最近在开发一个Go项目,由于本地的配置跟线上是不一致的,每次提交上去的时候,都要先把本地的项目配置改成线上的配置,这样操作很麻烦,同时也有可能会泄露数据库,所以打算在Drone构建过程的时候,读取配置进行覆盖,这样就不用每次提交前都要自己手动修改,同时保证一些重要信息不会泄露,下面跟大家分享如何操作。

       一、配置项目参数

       我们直接到Drone管理后台找到对应项目,将我们的项目参数,我这里是数据库信息,配置到Secrets中,截图如下

1.png

       二、构建覆盖底层镜像

       我们先打一个基础镜像,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条评论

发表评论