六、SVN 大中小型企业代码上线解决方案(生产案例 )

作者: print("") 分类: linux 发布时间: 2017-05-18 22:34

大中小型企业上线解决方案

  • 目录组织结构说明

[root@mysql1 applicacation]# tree /data/www/
/data/www/
|– branch   ß 分支,为了测试时用、几天以上的项目必须开分支、测试需要本分通过、才能合并到主线测试
|– tags ß 版本记录用
`– trunk  ß主线 ,与正式线相对应,当天不上线文件不允许提交

  • SVN 上线
  • 现状:
    此类公司一般有3-5个开发人员,程序多为PHP程序,直接通过FTP直接上传代码到线上服务器,随时随地上线更新,
    此上线方法存在的问题,

    • 开发不经过测试人员测试、用户访问页面刷新后页面即改变、对用户体验比较差、如果开发错了代码照成的影响就更大了
    • 大概50%以上的故障直接和开发程序代码有关、(比如: 开发1写错了一个循环代码、此时用户访问就能把服务器搞死)
    • 网站出了一个问题一般是运维人员的问题、(例如:宕机)但这种情况下。问题大多数可能由开发人员引起的

    解决方案:

    • 开发人员需要在个人电脑搭建LAMP环境测试网站代码、并且在办公室或IDC机房有测试环境
    • 代码上线规则时间,例如:三天上线一次,如网站需要经常更新可每天下午17点上线(看网站业务性质而定,原则就是影响用户最小)
    • 代码上线之前需要备份、网站程序出了问题方便回退、另外上传代码时尽可能先传到临时目录、完整后mv过去、
    • 由运维人员管理上线、对于代码的功能性、开发更在意、而对于代码的性能和服务性的稳定。运维更在意、因此、运维上线这样更规范科学。

     
    2、2 中型企业上线解决方案
    规范运维人员操作步骤、指定统一的操作脚本、备份文件名称、备份文件路径、使操作人性化、统一化、web代码的上线流程图:

  • 提示:特别是JAVA代码环境、上线时、有数台机器同时更新:

    • 本地开发人员去SVN代码、当天上线提交到trunk、否则、长期项目单分支开发、然后在合并主线(trunk)
    • 办公网开发测试时、由开发人员或配置人员通过部署平台jenkins 实现统一部署(即在部署平台控制开发机器从SVN去代码、编辑、打包、发布到开发包名war)
    • 开发人员通知测试人员或一起测试、没有问题后、打上tag标记
    • 配置管理员、根据上步tag标记、checkout出代码、并配置好IDC测试环境的所有配置、执行编译、打包、(mvn,ant)(php不需要),如果有问题向上回退
    • 配置管理员或sa上线人员、把分发的内容推送到相关服务器(报名如war)然后通知开发及测试人员进行测试,如果有问题向上回退
    • 如果没有问题、继续打好tag。此时、配置管理员、根据上步的tag标记。Checkout出代码、并配置好IDC正式环境的所有配置。执行编译。打包。然后发布到IDC内部统一分发服务器
    • 配置管理员或sa上线人员、把分发的内容推送到相关正式服务器,然后通知开发及测试人员进行测试。如果有问题直接发布回滚指令

    IDC 正式上线的过程对于JAVA程序、可以是AB组分组上线的思路、即平滑下线一般的服务器、然后发布更新代码测试、无问题后、挂上服务器、同时在平滑下一半的服务器、然后发布更新代码测试(或者直接发布就挂上线)
    对于PHP 上线方法:发布时可以用发布到正式临时服务器、然后mv或更改link的方式发布到正式线目录、不需要重启、
    对于java上线方法、需要分组平滑上下线、(如负载均衡上摘掉部分服务器、)发布代码后。重启服务器测试
    2、3 上线解决方案注意事项
    1、办公室测试环境àIDC测试环境à正式生产环境,所有软件均应统一(如:操作系统、微博服务器。Jdk。php,tomcat,resion等办法)
    2、开发团队小组测试环境测试(该测试环境属于开发小组)。有问题直接返回给开发人员重新开发
    3、有专门的测试工程师、程序有问题直接返回给开发人员(此时返回的一般为程序的BUG、成为BUG库)无问题进行IDC测试
    4、IDC测试有测试人员和运维人员参与、交IDCtest。进行程序的压力测试、有问题直接直接返回给开发人员、无问题进行线上环境上线
    5、数台服务器代码分发上线方案举例(JAVA)
    (1)、假设业务服务器有六台、将服务器A、B两组、A组三台,B组三台、先对A组进行从负载均衡器中上平滑下线、B组正常提供服务、避免服务器因上线影响业务、
    (2)、下线过程是通过脚本将A组服务从RS池(LVS,NGINX,HAPROXy。F5等均有平滑方案)中踢出、避免负载均衡服务器将请求发送给A组服务器(此时的时间应该为网站流量少时、一般为晚上)
    (3)将代码分发到A组服务器的站点目录下。对A组服务器上线并重启服务、并由专业的测试人员进行访问测试、测试成功后挂上A组的服务器、同时下线B组服务器、B组代码上线操作测试等和A组相同、
    6、特别说明:如果是PHP程序、则上线可以简单化、直接将上线代码(最好全量)发布所有上线服务器的特定目录、分发完成后一次性mv或ln到站点目录。当然测试也少不了的
    7、大多数门户公司的前段页面都可以静态化或cache了、因此,动态部分访问平时就不会特别多
    9、SVN上包含代码和配置
    (1)SVN上存放程序代码(不包含资源。大公司基本资源和程序都是分离的)
    (2)存放所有服务器的配置文件(LAMP环境。如:apache、的httpd.conf配置文件)
    1)开发小组测试环境使用的配置文件
    2)办公室测试环境使用的配置文件
    3)IDC测试环境使用的配置文件
    在上线不同环境时、由配置管理员协调上线
    什么是配置管理员
    就是在开发和运维中间起一个连接纽带的一个职位、这个职位一般在大公司里会设置、负载SVN的管理、上线管理、申请、协调等工作。
     

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注