天天看点

自动化代码上线

一、自动化部署代码实践

自动化代码上线

早期手动部署代码

纯手动scp上传代码。

纯手动登陆,Git pull 或者SVN update。

纯手动xftp上传代码。

开发发送压缩包,rz上传,解压部署代码。

缺点:

全程运维参与,占用大量时间。

如果节点多,上线速度慢。

人为失误多,目录管理混乱。

回滚不及时,或者难以回退。

自动化代码上线

设计自动部署代码

流程设计,确定目标。

1、自动部署环境

1)开发环境

开发者本地有自己的环境,运维配置公共开发环境,大家可共用的服务。例如:开发数据库MySQL,Redis,Memcached等。

2)测试环境

功能测试以及性能测试。

3)预生产环境

生产环境集群中的某一个节点,并且连接生产库。(不对外,不做破坏型操作。)

4)灰度环境

根据不同的区域进行划分分。(生产环境)

5)生产环境

对用户提供服务的环境。

预生产环境由来:

数据库不一致,测试环境和生产环境数据库是不一样的。

使用生产环境的联调接口;例如:支付接口。(电商业务)

2、自动部署规划

已经有一个可以上线的代码在git仓库。

我们现在要做10个集群节点的一键部署,秒级回滚。

所有的web服务,都应该使用普通用户。(强烈建议)

所有的web服务都不应该监听80端口,除了负载均衡。

那我们如何设计一套生产自动化部署系统。

规划。

实现。 

总结和扩展。(PDCA方法论) 

生产环境应用。

实现思路:

1)代码放置位置

Git(首先)、SVN

2)获取最新代码

获取最新分支

获取版本号

获取tag包

3)差异解决

各个节点之间差异

代码仓库和实际的差异。配置文件是否放在代码仓库中。(配置单独进行存放,config.example )短信接口,支付,等敏感信息不让所有开发知道

统一的.集群有10个节点。(Job节点 crontab.xml 配置文件不一样)

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)如何测试

测试(关键的页面,API,后台等)

测试一个预生产环境,通过则继续部署,如果失败,退出部署操作。

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来实现。

本文转自写个博客骗钱博客51CTO博客,原文链接http://blog.51cto.com/dadonggg/1948942如需转载请自行联系原作者

菜鸟东哥