小生不才,自研全新发布系统,现处于我一人开发当中,后续博客将不断更新
Django : 1.11.11 Python : 3.6
项目简介:
- 基于git 系列(github, gitlab)
- 一键发布代码,无需其他人工干预
- 定时执行,立即执行 (妈妈再也不用担心我熬夜发布啦)
- 工单人工审核系统
- 手动新建项目的功能 + 审核
- 不通过自动打回
- 自动生成工单,自动订阅消息。
- 通过WebHook功能,传输自带加密功能
- 项目配置文件管理
- 一键式回滚版本
- 快速回滚 与 指定回滚
- 健康检查
- 检查不通过自动返回上个版本
- 传输加密功能
- 自动检测状态,状态异常自动告警
- 发布代码区分器
- 不同的代码区分发布方式。
- 需要预编译的代码,会自动打包发包检测
发布规划
需要有一个创建项目的功能, 配置文件的管理功能
新建项目包括
应用名,应用路径,对应的环境,对应的主机,代码版本
发布流程->
手动选择 - (应用名,环境名,代码版本)使用下拉菜单 -> 输入正确则 上线
判断代码类型
通过语言名字判别是否需要预编译
1. Python 、PHP -> 跳过
2. JAVA - 通过maven 脚本打包 标记标志位 再上传
推送 ,salt、ansible 、 rsync
双向加密。 把代码内容 和 自定义密码 混合一起 通过MD5 加密,再吧全部数据打包 一起推送
服务端 -> 通过脚本进行认证
一个小Python脚本来进行解密判断数据是否正常,echo结果 true或false,返给salt接受输出结果
通过软连的方式 切换目录, 可以有快速回滚的功能
先把上传的数据配到一个新的目录,
1. 不是java的语言程序,
即可 直接切换 软连,把替换下来的目录进行暂存,并打包保存至服务器内。预留。
最后reload一遍应用的服务。做一套的健康检查,删除(.git)隐藏的目录
2. 如果是java 的语言程序,
使用maven 解压出程序和目录,灰度发布,切机下线,进行迭代代码。把替换下来的目录进行暂存,并打包保存至服务器内。预留。
然后restart应用服务,最后做一套的健康检查,删除(.git)隐藏的目录
健康检查
具体检查方法未定,然后把最后的结果以 requests 的方式 回传服务器。完成一整个生命周期发布上线的功能
回滚操作
快速回滚 和 回滚到指定版本
快速回滚: 只需要切换然后即可回滚到上一次的 代码版本内
回滚到指定版本: 先指定代码版本,然后revert到指定版本上,再走一遍发布的生命周期即可。
配置文件管理
前提是需要几个表的支撑
配置文件管理表设计:OneToOne 一个项目,对应一个配置文件目录
对应项目名,对应项目代码,对应项目路径, 配置文件存放的路径,配置文件说明
在发布代码的时候 需要制定配置文件,程序上制定即可,不需要人为去改动参数
配置文件管理
手动录入信息,
1. 配置文件名
2. 配置文件对应的应用的路径
3. 配置文件信息
4. 手动上传文件功能
流程:
发布选项
1. 在平台上输入
- 发布环境, 应用名 , 代码版本, 发布类型 ,定时任务, 配置文件信息
2. pull 已测试通过的代码 到本地
3. 通过配置文件信息,将对应的配置文件 放入指定的路径内。并 删除目录内的 .git 隐藏文件
4. 开始进行判别代码类型
- java ,go - > 编译打包 - > MD5 校验
- php , python - > Pass - > MD5 校验
MD5 校验 -> 记录到 XXX.txt 文件
5. 先读数据库内容
1. 主机IP
2. 对应主机的对应路径
3. 应用名
4. sh脚本路径
5. 读取 配置文件信息(对应的应用,对应应用的路径) -> (配置文件管理)
6. 推送包到对应的主机上 (并发发送)
7. 判断 MD5 正确性,不通过直接结束,并销毁在已推送到设备上的文件
8. 推送成功,执行sh脚本
sh 脚本 (正常发布)
1. 先将原有文件拷贝打包保存
2. 解压新上传的压缩包。
3. 判断 文件类别,
1. php , python 着跳过 可以使用增量上传文件
2. go , java 需要解压包
4. 切换软连
5. reload 服务
6. 健康检查,-> 跳去另外的自定义脚本执行,执行结果记录写入数据库
8.1 如需回滚数据。 即切换软连接即可
sh 脚本(回滚)
1. 切换软连,
2. reload 服务
3. 记录数据返回数据库