作者介绍 徐亮伟,江湖人称标杆徐,曾负责大规模集群架构自动化运维工作。擅长自动化运维,并且在分布式、Python自动化、云计算虚拟化等领域有较深入研究。个人博客:http://www.xuliangwei.com。 一、自动化部署代码实践 早期手动部署代码 纯手动scp上传代码。 纯手动登陆,git pull 或者svn update。 纯手动xftp上传代码。 开发发送压缩包,rz上传,解压部署代码。
缺点: 全程运维参与,占用大量时间。 如果节点多,上线速度慢。 人为失误多,目录管理混乱。 回滚不及时,或者难以回退。
设计自动部署代码 流程设计,确定目标。 1、自动部署环境 1)开发环境 开发者本地有自己的环境,运维配置公共开发环境,大家可共用的服务。例如:开发数据库MySQL,redis,Memcached等。 2)测试环境 功能测试以及性能测试。 3)预生产环境 生产环境集群中的某一个节点,并且连接生产库。(不对外,不做破坏型操作。) 4)灰度环境 根据不同的区域进行划分分。(生产环境) 5)生产环境 对用户提供服务的环境。 预生产环境由来: 数据库不一致,测试环境和生产环境数据库是不一样的。 使用生产环境的联调接口;例如:支付接口。(电商业务)
2、自动部署规划 规划。 实现。 总结和扩展。(PDCA方法论) 生产环境应用。
实现思路: 1)代码放置位置 Git(首先)、Svn 2)获取最新代码 3)差异解决 4)项目名称如何设计 项目名称_环境名称_版本_分支_时间_某开发提交 测试: rainbow_test_v1.1.1_dev_2016-08-11_12:12_xuliangwei 生产:rainbow_pro_v1.1.1_master_2016-08-11_11:11_xuliangwei 5)如何更新 php,tomcat需要重启,重新软链接。 6)如何测试 7)记录日志 可以部署统计。 成功多少次。 失败多少次。 回滚多少次。
8)多人同时执行脚本 防止多人操作导致重复上线失败。通过lock锁对文件进行控制。 9)串行,并行 机器少的情况串行感觉不出什么。如果机器过多则会很慢。 分组部署并行部署,以及分组测试。 测试一个预生产环境,通过则继续部署,如果失败,退出部署操作。 10)部署服务器双机 防止部署系统down机,部署机代码丢失,误操作。 11)如何执行。 shell执行 web界面点击(自定义或jenkins)
12)如何实现正常回退,以及紧急回退(回滚的必要性) 通过软链接的方式来实现代码秒级别回退。 3、自动部署难点 在大公司推进自动化部署上线,是有许多的难点,根据个人公司的不同,来选择不同的方法来进行推进。 自动化推进难点: 能力(个人能力,团队能力) 责任(责任能否承担,敢于承担责任) 公司流程、人员、组织架构。
可通过如下方法推进: 目标化沟通。 责任划分 ITIL 项目管理:PMBOOK
自动部署实践 整个集群自动化部署流程设计如下:可根据如下思路,结合公司实际业务来编写shell脚本或者Python。 获取最新代码 编译(可选) 配置文件(软连接或者拷贝)。 打包(tar,加速传输) 文件分发(Scp Rsync Salt)(不需要密码验证) 将目标服务器移除集群(注释配置文件) 解压 防止webroot站点目录 scp差异文件(可能有一个节点配置文件不一样) 重启Web服务 测试
正常回退实践 列出回滚版本 目标服务器移除集群 执行回滚 重启并测试 加入集群
紧急回退实践 列出回滚版本(ls -l或find查出对应的历史版本)。 执行回滚操作(删除软链接,重建软链接)。 重启对应服务。
自动部署采坑 自动化部署php环境或者java环境的过程中,那么你一定遇到了如下的问题。 如何应用到你的生产环境。 回退到“上一个”“正常”版本。 自动部署软连接的坑。
PHP如果开启Opcache,需要重启PHP,或者清理opcache Java Tomcat是必须要重启,最好每次清理work,tmp缓存目录。
二、自动化系统构建实践 环境准备 首先在执行脚本前,先做好初始化环境,最好是通过saltstack来完成。我这里没有那么多机器,就先用两台演示。 linux-node1 192.168.90.201 linux-node2 192.168.90.202 1、创建普通用户 useradd xuliangwei passwd xuliangwei 2、配置密钥 
3、创建相关目录 
4、配置Nginx 
5.配置好git环境 centos7部署gitlab 克隆项目 最终效果如下:

剖析脚本 查看脚本,具体配和第一部分来解读: 




执行上线: 
查看当前版本 
执行回滚操作 
查看日志: 
脚本其他功能 当然此脚本功能不仅仅如此,可以通过git分支,git tag包等方式来上线,这些根据贵公司的具体业务来进行调整,也可以自己开发一个web界面来调用此脚本,这样就可以将上线工作交给开发,当然也可以使用开源jenkins来实现。 后期更新 (如上脚本)+gitlab+jenkins+Sonar 构建自动化部署代码,并代码发布前质量管理。 精选专题(点击蓝色标题可阅读全文) ◆ 近期热文 ◆ 腾讯高级工程师:一道面试题引发的高并发性能调试思考 【推荐】一款足以秒杀流行商业数据库的异域猛禽 10年研发老兵:如何构建适合自己的DevOps工具与平台 浙江移动亿万级实时流计算之路与踩过的坑 只改2条语句,治好HIS系统数据库“葛优瘫”! ◆ 专家专栏 ◆ 杨志洪丨杨建荣丨陈能技丨丁俊丨卢钧轶丨李海翔 魏兴华丨邹德裕丨周正中丨高强丨白鳝丨卢飞丨王佩 ◆ 近期活动 ◆ Gdevops全球敏捷运维峰会广州站 峰会官网:www.gdevops.com
|