zoukankan      html  css  js  c++  java
  • 自动化发布系统

    小生不才,自研全新发布系统,现处于我一人开发当中,后续博客将不断更新 

    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. 记录数据返回数据库



  • 相关阅读:
    JQuery2
    Java基础复习4
    HTML基础复习4
    Java基础复习3
    HTML基础复习3
    HTML基础复习2
    HTML基础复习1
    shiro权限管理(认证和授权)
    权限管理(认证和授权)
    关于mybatis动态sql的if标签的一个问题
  • 原文地址:https://www.cnblogs.com/huidou/p/11024965.html
Copyright © 2011-2022 走看看