php发展

首页 » 常识 » 常识 » 自动化部署难驾驭这篇文章分分钟拯救你的运
TUhjnbcbe - 2021/6/29 18:56:00
最近看到一篇很牛的干货文章,是关于自动化部署的,有人说自动化部署很难驾驭?那我只想说,那是因为你没看这篇文章,它可以分分钟拯救你的运维体系!一、自动化部署代码实践早期手动部署代码

纯手动scp上传代码。

纯手动登陆,Gitpull或者SVNupdat。

纯手动xftp上传代码。

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

缺点:

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

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

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

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

设计自动部署代码

流程设计,确定目标。

1、自动部署环境

1)开发环境

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

2)测试环境

功能测试以及性能测试。

3)预生产环境

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

4)灰度环境

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

5)生产环境

对用户提供服务的环境。

预生产环境由来:

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

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

2、自动部署规划

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

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

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

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

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

规划。

实现。

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

生产环境应用。

实现思路:

1)代码放置位置

Git(首先)、SVN

2)获取最新代码

获取最新分支

获取版本号

获取tag包

3)差异解决

各个节点之间差异

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

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

4)项目名称如何设计

项目名称_环境名称_版本_分支_时间_某开发提交

测试:rainbow_tst_v1.1.1_dv_-08-11_12:12_xuliangwi

生产:rainbow_pro_v1.1.1_mastr_-08-11_11:11_xuliangwi

5)如何更新

PHP,Tomcat需要重启,重新软链接。

6)如何测试

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

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

7)记录日志

可以部署统计。

成功多少次。

失败多少次。

回滚多少次。

8)多人同时执行脚本

防止多人操作导致重复上线失败。通过lock锁对文件进行控制。

9)串行,并行

机器少的情况串行感觉不出什么。如果机器过多则会很慢。

分组部署并行部署,以及分组测试。

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

10)部署服务器双机

防止部署系统down机,部署机代码丢失,误操作。

11)如何执行。

Shll执行

Wb界面点击(自定义或Jnkins)

12)如何实现正常回退,以及紧急回退(回滚的必要性)

通过软链接的方式来实现代码秒级别回退。

3、自动部署难点

在大公司推进自动化部署上线,是有许多的难点,根据个人公司的不同,来选择不同的方法来进行推进。

自动化推进难点:

能力(个人能力,团队能力)

责任(责任能否承担,敢于承担责任)

公司流程、人员、组织架构。

可通过如下方法推进:

目标化沟通。

责任划分

ITIL

项目管理:PMBOOK

自动部署实践

整个集群自动化部署流程设计如下:可根据如下思路,结合公司实际业务来编写shll脚本或者Python。

获取最新代码

编译(可选)

配置文件(软连接或者拷贝)。

打包(tar,加速传输)

文件分发(ScpRsyncSalt)(不需要密码验证)

将目标服务器移除集群(注释配置文件)

解压

防止Wbroot站点目录

scp差异文件(可能有一个节点配置文件不一样)

重启Wb服务

测试

正常回退实践

列出回滚版本

目标服务器移除集群

执行回滚

重启并测试

加入集群

紧急回退实践

列出回滚版本(ls-l或find查出对应的历史版本)。

执行回滚操作(删除软链接,重建软链接)。

重启对应服务。

自动部署采坑

自动化部署PHP环境或者Java环境的过程中,那么你一定遇到了如下的问题。

如何应用到你的生产环境。

回退到“上一个”“正常”版本。

自动部署软连接的坑。

PHP如果开启Opcach,需要重启PHP,或者清理Opcach

JavaTomcat是必须要重启,最好每次清理Work,Tmp缓存目录。

二、自动化系统构建实践环境准备

首先在执行脚本前,先做好初始化环境,最好是通过saltstack来完成。我这里没有那么多机器,就先用两台演示。

linux-nod..90.

linux-nod..90.

1、创建普通用户

usraddxuliangwi

passwdxuliangwi

2、配置密钥

3、创建相关目录

4、配置Nginx

5.配置好git环境

cntos7部署gitlab

克隆项目

最终效果如下:

剖析脚本

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

执行上线:

查看当前版本

执行回滚操作

查看日志:

脚本其他功能

当然此脚本功能不仅仅如此,可以通过Git分支,Gittag包等方式来上线,这些根据贵公司的具体业务来进行调整,也可以自己开发一个Wb界面来调用此脚本,这样就可以将上线工作交给开发,当然也可以使用开源jnkins来实现。

后期更新

(如上脚本)+Gitlab+Jnkins+Sonar构建自动化部署代码,并代码发布前质量管理。

作者简介

徐亮伟

江湖人称标杆徐,曾负责大规模集群架构自动化运维工作。擅长自动化运维,并且在分布式、Python自动化、云计算虚拟化等领域有较深入研究。个人博客:徐亮伟架构师之路;

多IT技术性文章和福利活动

敬请

1
查看完整版本: 自动化部署难驾驭这篇文章分分钟拯救你的运