企业代码上线之SVN解决方案(二)

SVN目录组织结构说明

tree /home/oldboy/svn/
home/oldboy/svn/

|–branch #分支为测试使用,几个以上的项目必须开分支,测试需要本分支通过,主线合并到分支通过,才能合并到主线进行测试。
|–tags #版本记录用
–trunk #主线,与正式先相对应,当天不上线文件不允许提交。
以上为SVN开发人员目录情况

一、小型企业代码上线案例


开发直接管理生产环境

现状分析:
  小型公司一般只有几个开发人员,并且网站核心程序大多数都是PHP语言开发,为了方便,会直接通过FTP直接上传程序代码到线上服务器,随时随地上线更新。

上述方案的特点和问题:

  1.发布快,及时,随时随地就可以发布代码
  2.开发人员发布的代码不经过测试人员的测试,且用户访问页面刷新页面即改变,也可能刷新瞬间程序在更新,到时无法访问,对网站用户的体验比较差,如果开发写错了代码,造成的影响就更大了,这是拿用户作为测试的上线方案。
  3.据统计,网站中50%以上的故障是开发和开发程序的代码有关(开发写错了一个循环代码,导致了死循环,此时大量的用户访问这个程序,就能把服务器资源耗尽,搞死服务器。)
  4.在中小公司,网站出了问题,一般是运维人员的问题(例如网站宕机)但这种情况呢下,问题大多可能由开人员或者代码引起的,这里比较好的策略是开发项目负责制思想。

小型企业上线架构方案建议:

  1.开发人员需在个人电脑搭建LAMP/LNMP环境测试开发好的网站代码,并且在办公室或者IDC机房的测试环境通过,最好是有专职测试人员。
  2.程序代码上线要规定时间,例如:三天上线一次,如网站需经常更新,可每天17点上线,这个要看网站的业务性质而定,原则就是影响用户体验最小。
  3.代码上线之前需要备份,网站程序出了问题方便回退,另外,从上线的技巧上讲,上传时尽可能传到服务器网站临时目录,传完整一步mv过去,或者通过ln做软连接。
  4.尽量有运维人员管理上线,对于代码的功能性,开发人员更在意,而对于代码的性能优化和上线后服务器的稳定,运维更在意服务器的稳定,因此,如果网站宕机问题归运维管,就要让运维上线,这样更规范科学。否则,开发随意更新,出了问题运维负责,这样就错了。对运维也不公平。

二、中型企业代码上线案例

  中型企业上线,一般是规范运维人员操作步骤,指定统一的上线操作脚本,备份文件名称,备份文件路径,使操作人性化,统一化,自动化。
web代码的上线流程演示图:

三、大中型企业代码上线案例

  大型企业上线一般制度和流程控制比较多,比较严谨,下面图为某大型企业上线解决方案
架构:ITIL,BSW规范

上线分为两部分:

上线时,大型集群环境一般有数台机器集群,因此,同时需要更新或者分批更新:
我们以特别是Java架构环境代码上线为例如下:

  1)本地开发人员从SVN中取代码,当天上线的提交到trunk,否则,长期项目单分支开发,然后在合并主线(trunk).
  2)办公室内网开发测试时,有开发人员或者配置管理员通过部署平台jenkins实现统一部署,(即在部署平台上控制开发机器从SVN取代码,编译,打包,发布到开发机,包名如 idc_dep.war)
  3)开发人员或和测试人员一起测试,没有问题后,有配置管理员打上新的tag标记。
  4)配置管理员,根据上步的tag标记,checkout出上线代码,并配置好IDC环境的所有配置,执行编译,打包(mvn,ant)(php不需要),然后发布到IDC内的统一分发服务器,这里要注意,不同环境的配置文件是随代码同时发布的;
  5)配置管理或SA上线人员,把分发的程序代码内容推到相关测试服务器(包名如idc_test.war)然后通知开发及测试人员进行测试,如果有问题向上回退,继续修改。
  6)如果IDC测试没有问题,继续打包tag标记,此时,配置管理员,根据上步的tag标记,checkout出测试好的代码,继续打上tag标记,此时,配置管理员,执行编译,打包(mvn,ant)(php不需要)然后发布到IDC的统一分发服务器主机,准备批量发布。
  7)管理配置管理员与SA上线人员,把分发的内容推到相关正式服务器(包名如idc_product.war)然后通知开发及测试人员进行测试,如果有问题直接发布回滚指令。

四、Java程序代码上线的具体方案:

对于java上线方法:
  较大的公司需要分组平滑上线,例如:首先从负载均衡器上摘掉一半的服务器,发布代码后,重启服务器测试,没有问题后,挂上测试好的。在下另外一般,如果前段有DNS智能分析,上线可以分地区上线若干服务器,逐渐普及到全国的服务器,这个称为灰度发布。
正式上线环节
  分组上线:A、B两线

Nginx为例
 三套配置文件:
  一套是全部服务器的配置文件
  一套是A的配置文件
  一套是B的配置文件
需要哪一套配置文件,直接cp后reload nginx服务即可
注意:开发环境、测试环境、生产环境统一系统、软件版本、统一路径、IP、主机名等


如果是大型门户网站,全国上线,使用灰度发布

提示:
  以上方案可以作为参考思路,具体情况还得按照公司业务情况进行规划。

1 条评论

发表评论

*