DevOps理念初探之落地项目1:自动化代码发布平台功能实现

背景

市面上主要的自动化或者DevOps理念中的持续集成持续发布模块说明都大同小异,大多数是使用代码托管平台的网络钩子,当有对应事件发生时触发钩子向配置好的回调地址发送POST请求。但是大多都是将接收POST请求的代码和网站代码放置于同一台服务器。而且更新代码的方式是进入网站代码目录进行git pull 操作。另外有一些开源敏捷运维系统比如Jenkins/OpsManager。功能都比较完善。但是对于现阶段需求来讲显得过重。

背景暴露问题

  1. 生产环境集群下多台服务器代码需要更新,运维精力和时间成本太大,并且人工发布代码出错率太高。
  2. 生产环境集群下多台服务器代码需要更新,就需要每台网站服务器都需要部署可以接收webhook的代码。
  3. 生产环境需要安装git svn等环境
  4. 代码托管平台需要配置多个回调POST请求路径
  5. 版本回滚是硬伤,无法平滑无损发布并且无法比较优雅的回滚代码版本
  6. git pull 容易产生合并冲突等问题
  7. 持续集成持续发布的情况下,代码已经投入正式生产接受客户访问时,持续集成和发布会带来负面影响。所以编写AuthDeploySystem让代码上线之前有一个可控过程。

目的

公司项目代码托管使用的是局域网本地化GitLab。我希望编写并实现自动化代码发布平台系统对GitLab无缝对接。

拓扑

AutoDeploySystem

实现原理

  1. 当研发同事在GitLab对项目进行Tag打包操作时会触发配置好的钩子对我的平台发送POST请求。以下简称AutoDeploySystem
  2. 根据POST数据进行入库并实现测试/生产环境的Tag自动发布以及Tag回滚功能。
  3. 在远程网站服务器nginx虚拟主机配置文件内,一定要使用软连接方式发布网站代码目录,这对于网站代码无损发布/升级回滚以及日常维护具有重要的深远意义!如下三张图所示。
    代码目录软连接发布
    默认location
    php动态location

环境配置

GitLab配置

  1. GitLab 版本11.5.1-ee
    在这里插入图片描述
  2. 设置允许接收内网hooks(需要使用管理员登陆,在Admin area/Network处配置)
    在这里插入图片描述
  3. AutoDeploySystem从GitLab下载对应checkout_sha的代码时需要使用GaitlabApi。所以需要配置Access Token。使用管理员登陆。在User Settings /Access Tokens 设置Personal Access Tokens
    在这里插入图片描述
    在这里插入图片描述
  4. Webhooks 设置(在每个需要接入AutoDeploySystem功能的项目下配置URL /Secret Token 以及打勾 Tag push events 保存, 如果没配置https,Enable SSL verification 取消勾选)
    在这里插入图片描述

AutoDeploySystem 服务器环境配置

  1. 准备一台Centos 6.x 服务器,运行自动发布系统。
  2. Python环境 Python 2.7.11 ,如果是Python 2.6.x需要升级到Python 2.7.11。升级步骤可以参考我的另外一篇博客https://blog.csdn.net/qq_34668238/article/details/88550908
  3. 防火墙放行AutoDeploySystem代码端口
  4. 设置ntpdate 自动同步网络时间
    在这里插入图片描述
    在这里插入图片描述
  5. 安装mongodb 4.0.1 需要开启用户认证。mongodb安装以及开启用户认证请自行Google
  6. 安装pip然后安装Django 1.11 Fabric 1.14.1 pymongo 3.7.2
    在这里插入图片描述

配置AutoDeploySystem 代码配置文件

在这里插入图片描述

  1. Mongodb配置,ip/port/user/password/dbname 配置成自己的
    在这里插入图片描述
  2. GITLAB_TOKEN字典配置,项目id与安全token要匹配对应上。项目id是在GitLab项目名称下显示的项目ID
    在这里插入图片描述
    安全token是在项目下创建webhook的时候设置的
    在这里插入图片描述
    在这里插入图片描述
  3. 配置GITLAB_ROOT_PRIVATE_TOKEN字典,将值替换成配置GitLab获取到的token值
    在这里插入图片描述
    在这里插入图片描述
  4. GITLAB_HOME_PAGE 变量的值配置成GitLab访问网址
    在这里插入图片描述
  5. CODE_KEEP_DIR 变量的值配置成AutoDeploySystem系统保存代码的路径(创建一个空目录即可)
    在这里插入图片描述
  6. PROJECT_ID_DEPLOY_DICT 字典变量根据提示设置成对应的值
    在这里插入图片描述
  7. 在Django admin管理站点添加用户(用户名:项目id,密码:安全token)
  8. 确保AutoDeploySystem所在服务器已经可以无密码访问远程网站服务器。使用ssh-copy-id 命令进行无密钥访问配置。
  9. Nginx uwsgi Django 项目部署请自行Google

AutoDeploySystem使用部分截图

  1. 项目id与安全token没对应上无法登陆系统
    在这里插入图片描述
  2. 输入正确的项目id与安全token进入系统点击Display Tag如图所示。显示测试/生产环境最新发布的代码Tag版本、对应checkout_sha版本、发布时间。
    在这里插入图片描述
  3. 研发同事在GitLab执行打Tag操作
    在这里插入图片描述
  4. AutoDeploySystem接收到POST请求的数据,入库
    在这里插入图片描述
  5. Deploy功能下下拉列表框自动出现研发同事打的Tag版本名称
    在这里插入图片描述
  6. 选择Tag版本之后,点击deploy test env 按钮将Tag对应的checkout_sha代码发布到远程服务器
    在这里插入图片描述
  7. 远程服务器已经变更成功
    在这里插入图片描述
  8. 对当前current软连接对应的代码目录进行测试。当前对外提供服务代码生效。
  9. 同时支持在正式发布软连接版本之前执行对应项目的命令。
    在这里插入图片描述
  10. 当前测试/生产环境Tag版本信息自动更新
    在这里插入图片描述
  11. 回滚指定版本Tag
    在这里插入图片描述
  12. 不允许回滚未发不过的Tag版本
    在这里插入图片描述
  13. 不允许发布相同checkout_sha的Tag
    在这里插入图片描述
  14. 点击Logout 退出到登陆首页
    在这里插入图片描述

AutoDeploySystem第一版存在的问题

  1. 前端界面简陋
  2. 没有ajax 异步加载,都是整个页面一起渲染到前端
  3. 串行发布代码。如果生产环境服务器数量较多。执行效率会慢。需要加入Fabric 的 parallel
  4. 没有加入session过期
  5. 环境部署较为复杂

优势

  1. 使用简单。核心功能完整。
  2. 入库了GitLab发来的POST所有请求。可扩展许多其他功能。比如Deploy成功之后给打Tag包的同事发送邮件告知等。

关于代码

本人小白一枚。代码是使用最简单的语法编写。抽象化层次较低。喜欢交流的可以私聊我。一起学习成长。

感谢

感谢同事@川 的指点和帮助

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

于特洛夫斯基

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值