Authored by 梁志锋

增加新文件

# Web项目上线流程不完全指南
## 前提条件——遵循gitflow规范
1. 以前:有测试环境、预生产环境、线上正式环境,分别对应的分支是beta、stable、master。gitflow没有很好的执行。
2. 现在:有测试环境、线上灰度环境、线上正式环境,分别对应的分支是releaseXXX、master、master。现在严格按照gitflow来执行。
3. 差异点:beat、stable一直都存在,不符合gitflow规范,合并分支时,容易产生冲突,会导致很多的上线问题。
遵循gitflow规范的releaseXXX分支,在上线稳定后,生命周期结束,合并分支时,产生的冲突较少。
## 测试环境上线步骤
注: 以后测试环境由测试人员维护。
### 开发在本地提交代码
git fetch
git checkout -b release/4.3 在版本转测之前从develop拉一个分支,命名release/4.3
git merge --no-ff origin/master(建议有这一步,以免上线前合入master产生大量冲突导致最终上线的功能异常)(这一步有异议,gitflow上没有)
将package.json、application.developer.ini相关的4个文件的静态资源升1个版本
compile下新建一个该版本命名的文件夹用于存放缓存文件(强制提交git add -f)
cd static
gulp ge 产生的static/dist文件(强制提交git add -f)
git add XXXX
git commit -m “注释”
git push origin/release/4.3 提交上述所有的更新
合并遇到冲突的解决办法
a、命令 使用git checkout —theirs 文件路径, 这样接受远程某个目录的代码
git checkout —ours 文件路径 ,接收本地代码
要取两者合集的,手工进行合并。
b、IDE的git插件
Atom、PHPstorm、WebStorm都有相应的git插件,可以很直观的查看冲突的情况。
c、compare文件比对工具
### 测试在测试机拉代码
ssh root@测试机IP
再输入密码
git checkout -b release/4.3
git pull origin/release/4.3
如有需要,进入compile当前版本的文件夹,rm -rf * 删除所有的缓存文件。
注意:1、查看yohobuy.php文件是否是测试环境的接口
2、检查index-test.php中的use_cache的值为false
## 灰度环境上线步骤
灰度环境也是生产环境, 要求和生产环境一样严格。
十分重要,先检查yohobuy.php的接口是否是生产环境。(之前发生过测试环境接口的代码发送到生产环境了,还好及时发现了)
cd static
gulp ge 产生的static/dist文件(强制提交git add -f)
gulp dist 将静态资源推送到CDN
在master上打tag标记
git tag release4.3
git push --tags
通知测试发上线邮件或自己发邮件,邮件内容包括代码位置、nginx的修改(如有修改需提醒将线上文件备份)、发布到哪个服务器(目前PC及H5都要发腾讯云和亚马逊、node活动只发亚马逊)、host设置及其它有必要交代的事项。如果是node活动,邮件注明pm2重启的命令:pm2 restart yoho-activity-node
hosts设置如下,该地址是腾讯云灰度环境的外网IP:
123.206.1.107 5cm.m.yohobuy.com item.m.yohobuy.com login.m.yohobuy.com m.yohobuy.com new.m.yohobuy.com guang.m.yohobuy.com search.m.yohobuy.com list.m.yohobuy.com nike.m.yohobuy.com sale.m.yohobuy.com *.m.yohobuy.com 2percent.m.yohobuy.com huodong.yohobuy.com
## 生产环境上线步骤
十分重要,先检查yohobuy.php的接口是否是生产环境。(之前发生过测试环境接口的代码发送到生产环境了,还好及时发现了)
步骤与预生产环境上线步骤基本一致,区别:理论上测试时不指host,如特定要测试某个云还是要指hosts(找运维要IP)
如有必要,将版本升1个版本(升级版本compile下的文件夹也要新加一个并强制提交)。
如果必要,需要重新打tag标记,如release4.3.1
上线(包括上灰度环境)需要非常谨慎,仔细合代码,细心、细心、细心,重要的事情讲三遍。
由于上线时间一般比较晚,精神没有白天好,所以务必在白天做好准备工作,并提前想好上线失败的退路(代码和配置文件的备份是否正常),如上线失败要立即回滚,不能中断线上业务太长时间,然后排查上线时的代码、配置及日志文件。
## 上线成果确认
1、进行主流程验证:登录、浏览商品、搜索、加入购物车、提交订单、支付(包括微信支付)
2、如发现功能异常,登录堡垒机核实代码版本以及nginx配置是否正确,有时运维的操作可能遗漏部分机器。
3、上线稳定后,将release合入到develop分支,然后删除release分支。
## 其它注意事项
1 连接服务器的命令
ssh 用户名@密码
2 连接堡垒机的命令
旧堡垒机:ssh -p 6002 用户名@192.168.250.114
新的堡垒机机:ssh -p 222 用户名@54.222.221.24
Windows使用网站进行登陆堡垒机更方便。
3 测试nginx是否正常,启动,重启的命令
sudo nginx -t (测试nginx文件是否有语法错误)
./nginx (启动)
./nginx -s reload (修改nginx需要重启后才生效)
4 compile下以版本号命名的缓存文件文件夹要存在并且有读写权限,否则程序可能不能正常访问
查看读写权限:ls -l
修改文件权限:chmod 777 1.3.22 , 这里1.3.22是文件夹名
要避免上述操作,请确保推送到远程的代码已经有版本号命名的缓存文件夹。(正式环境以及灰度环境运维只拉代码,不会去新建文件夹的)
如在测试环境发现上述现象,及时补救,加上文件夹并推送远程。
5 查看进程是否启动的命令 ps -ef | grep 进程名
例如:一个502错误定位过程,是发现apache服务已经停掉了
6 与APP相关的nginx配置
有时候APP的同事会来让我们改一个其中的配置,请跟同事确认是改测试环境还是线上环境,如果是线上环境需要合入master
配置的文档路径:http://git.dev.yoho.cn/mobile/yohoapi/blob/master/
比如要开启DNS直连,文档如下:
去MD5在线网站:http://md5jiami.51240.com/ ,将kdl字符串进行加密, 取结果32位小写放在nginx文件中
7 如上线后回滚,再通过运维系统拉代码可能更新不到任何代码,登陆堡垒机核实是否真的没有拉到新代码,如果是,需要通知运维重新建一个文件夹,重新拉代码。
8 堡垒机用于查看线上服务器的代码和配置,信息如下:
亚马逊堡垒机 密码123456
172.31.23.111
172.31.21.139
172.31.22.1
172.31.20.56
172.31.31.146
172.31.16.147
172.31.25.17
腾讯云堡垒机
10.66.1.2
10.66.1.3
10.66.1.4
10.66.1.5
10.66.1.6
10.66.1.7
10.66.1.8
10.66.101.9(腾讯云灰度环境内网IP,其余是正式环境)
\ No newline at end of file
... ...