代码上线流程以及版本发布小结

之前的上线流程很简单粗暴如图:

这简直是灾难性质的,上传 SVN,在测试服务器上看看正在调试的接口没问题,直接 sync 到线上服务器。代码无法回滚,只能覆盖。而客户端的同学需要稳当的 api 作为调试,最初的做法,他们需要新数据,我们就需要上线代码。这很坑爹,也许某人某段代码正写了一半,又正好提交。被另外一个人上线了,那么就线上出了严重 BUG。对此我们很头疼,所以做了如下规划:

首先建立三个版本库

  1. 开发服务版本库(对应图片中 dev,假设为 http://211.155.84.144/topit_dev)
  2. 外测服务版本库(对应图中 beta,假设为 http://211.155.84.144/topit_beta)
  3. 线上服务版本库(对应图片中 online,假设为 http://211.155.84.144/topit_online)

可能只分上面三个层级还是不够细,但是考虑到公司的实际情况,这是一个折中方案,后期实际证明稳定性得到了很大的保障。

然后做了一个根据版本配置指定 api 地址的管理后台,该 api 用于 app 在启动之初和启动之后轮询请求询问当前 app 应该请求的api 地址多少。如图所示

实际操作流程如下:

  1. 项目起步,规定好该版本的 build 和 version 之后(比如 build=3.2.1&version=400,实际还可以分得更新比如是 Android 还是 iOS,具体到哪个渠道,这里举例说明就不细分了),后台设置该版本的 api 地址为 dev。
  2. 每个人先将自己的代码直接 sftp 上传到自己的测试 vhost 指定的目录中,进行调试。
  3. 调试通过后,将代码提交到 dev 版本库,然后钩子触发更新到 dev 目录。而当前 dev 目录则是我们内部调试的 api 后端服务的根目录,客户端同学在开发的时候就调用该 api。
  4. 开发完毕,内部测试通过,将 dev 目录的文件 rsync 同步到 beta 目录,过滤了 dev 目录的 svn信息
  5. 将 beta 目录提交 svn
  6. 再执行 beta 代码远程同步脚本,将 beta 目录的代码同步到多台 beta 测试服务器上。
  7. 然后根据当前的外部版本号和内部版本,在后台将其 api 请求地址和图片上传地址修改为 beta 服务器相关的地址(图片简写为1台服务器)
  8. 然后将 app 交给专业第三方测试公司帮我们测试
  9. 测试通过后,对于 bug 我们则再走一遍前面的 dev 到 beta 的步骤,然后,我们通过在进入 app 首屏给2000到3000个用户强制弹窗让其更新到指定版本。进行灰度发布。
  10. 灰度发布发现 bug,修复 bug 后再走一遍上面的流程,然后把 beta 目录的代码同步到 online 目录,同样过滤掉 svn 信息
  11. 在 online 目录做版本提交到 online svn 版本库
  12. 然后再执行 online 目录代码远程同步脚本,将 online 目录的代码同步到所有线上服务器上。
  13. 然后根据当前的外部版本号和内部版本,在后台将其 api 请求地址和图片上传地址修改为线上服务器相关的地址
  14. 最后直接全站提示更新到指定版本。

如果突遇线上有紧急 bug 需要修复,如果预估时间比较长,我们可以直接将该版本号下的 api 请求退回到 beta 服务器上,然后在 online 目录修改完毕,提交 svn,同步代码之后再重新指向线上服务。

如果遇到某个紧急需求,需要马上上线的,我们只能通过单独 cp dev 下的某一个文件到 online 目录,然后做好版本控制,紧急上线。实际工作中,这种需求非常常见。做提交信息的填写就显得格外重要了。

未来需要做的 api 健康状态周期性监测,服务器周期性请求每个 api,然后和规定的正确数据进行对比,如果有问题则发出报警信息,以免每次都要等到用户反馈我们才知道有问题。还是由于版本迭代太快,数据结构实时调整是常有的事,开发成本和维护成本比较高,我们都只能暂时搁浅了。

今天我又把代码上线流程做了些优化

  1.  
  2.  
  3. "/update/log/path/publish.log"
  4.  
  5.  
  6.  
  7. sudo |((svn_diff_size>0));
  8. ||
  9. ;
  10.  
  11.  
  12. ||v |
  13.  
  14.  
  15. ;(($i == 0));   
  16.  
  17. cat wc (($num<5)); ;
  18.  
  19. rsync
  20. @$1::topit_online/
  21.  
  22. sudo |v |v cat   
  23.  
  24. ;
  25.  
  26. (脚本地址:https://github.com/zhoumengkang/notes/blob/master/shell/update_to_online.sh
    1. 提交时,修改的文件必须提交,以防出问题不方便回滚
    2. 没有加入版本库的文件提示最好添加到版本号,可以忽略
    3. 版本发布完毕之后给管理员发送邮件通知
时间: 2024-08-11 02:05:33

代码上线流程以及版本发布小结的相关文章

svn详细介绍,独立安装配置,hooks的配置管理以及大型门户网站代码上线流程

代码发布方案: 1,安装,优化 软件环境,(nginx,lvs)  <-------运维工程师 2,程序代码(不断更新).   <--------开发工程师,(开发,运维都可以发布) 3,配置变更(不断变更).   <--------运维工程师. 一.版本控制管理工具SVN详解 1.1 什么是SVN(subversion) ? SVN是近年来非常优秀的版本管理工具,与CSV管理工具一样,SVN是一个跨平台开元版本控制系统,但是SVN与众不同的是,SVN会备份并记 录每个文件每一次的修改更

SVN代码上线流程

为了确保维护svn代码的正确性,特制定上传代码流程如下: 开发人员开发: 开发人员本地分支----取得svn最新代码(根据前一天的最后tag合并)-----代码开发----提交分支. 合并时候注意事项,对于冲突的文件看是不是自己本地正在修改的文件,不是的话就按照诛仙的tag来覆盖,否则按照本地,最好提前解决冲突问题(不好操作的话就被分好自己本地代码,讲SVN代码拿过来,好好看一下冲突冲突的问题),这样在回合的时候就可以按照自己分支来操作了(当然我们也要看一下,以防止别人先合并) 开发人员代码合并

代码上线流程

目录 上线流程 填写申请单 运维人员操作流程 上线流程 填写申请单 填写<系统变更.上线申请单> 顶目名称:顶目名称,如 Linux运维 项目版本:版本号 申请时间:需在工作日13点前作出申请 上线时间:由运维经理指定上线时间(一般是工作日下午17点左右,紧急情况例外) 完成时间:代码上线所有操作完成时间(代码上线.回滚,确认) 变更内容:需申请人对此处上线引起的结构.内容等变化,详细记录 申请人:填写申请代码上线人的姓名 上线人:填写服务器操作人的姓名(由运维经理指定) 技术经理:技术经理亲

php代码上线,实现版本切换

以下为现有php业务,代码上线方式.实现:4套环境版本切换. [[email protected] htdocs]# cat release.sh #!/usr/bin/env bash   work_dir=/mnt/var/www/htdocs release_dir=/var/www/htdocs   # app environment app_env=$1 # build release file path build_file_path=$2   help() {    echo   

Jenkins + Gitlab + Ansible--playbook 代码上线流程(文末有免费视频)

jenkins 构建是支持 git 选择分支 安装 Git Parameter 插件在系统管理中的插件管理 然后点击选插件,在右上角输入 Git Parameter,找到 Git Parameter 后点击左下方的的直接安装 . 参数化构建过程 插件安装成功后,在项目配置中后看到多了一个"参数化构建过程" 勾选"参数化构建过程",然后添加 Git Parameter , 配置如下 在源码管理中添加(需要提前将公钥设置好) 参数化构建过程添加 git 参数 Git P

海量用户-高并发SAAS产品测试上线流程

海量用户高并发SAAS产品测试上线流程 SAAS产品测试上线流程-以Web插件产品为例子 1   概述 在互联网产品中,IT公司之间更加注重产品功能之间的协作,SAAS形态的产品扮演着越来越重要的作用. 一个典型的完全由宿主代理的SAAS服务的通讯流程如下图: 这样的产品一般具有如下特点: 一般由第三方提供专门的服务 通常以网络为媒介来提供服务 具备嵌入的客户端功能 具备第三方服务端功能 一般不以独立的产品形式直接面向客户 一般需要集成“寄生”在宿主产品中来面向客户 SAAS形态的主要产品有:

ios上线流程

一.前言: 作为一名iOSer,把开发出来的App上传到App Store是必要的.下面就来详细讲解一下具体流程步骤. 二.准备: 一个已付费的开发者账号(账号类型分为个人(Individual).公司(Company).企业(Enterprise).高校(University)四种类型,每年资费分别为$99.$99.$299.免费.). 一个已经开发完成的项目. 三.检查: 你的Xcode必须是正式版的,beta版本的Xcode是不能上传项目的. 上传使用的 Mac 的 OS X系统必须也是正

SVN版本管理与代码上线架构方案

SVN是Subversion的简称,是一个开放源代码的版本控制系统,可以超越时间的管理文件和目录.文件保存在中央版本库,除了能记住文件和目录的每次修改以外,版本库非常像普通的文件服务器.你可以将文件恢复到过去的版本,并且可以通过检查历史知道数据做了哪些修改,谁做的修改.这就是为什么许多人将 Subversion 和版本控制系统看作一种"时间机器".说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的. svn与git的区别svn   svn版本控制系统是集中式的数据管理,

代码上线

1 .小型企业现状 小型公司一般只有几个开发人员,并且网站核心程序大多都是PHP语言开发,为了方便,会直接通过FTP直接上传程序代码到线上服务器,随时随地上线更新. 1.1 上述代码方案的优缺点 优点:发布快,及时,随时随地就可以发布代码. 缺点:开发人员发布的代码不经过测试人员的测试,用户刷新网页可能发现页面改变,也可能刷新瞬间程序在更新,到时无法访问,对网站用户的体验较差,如果开发写错了代码,造成的影响就更大了,这是拿用户做测试的上线方案. 据统计,网站中大概50%以上的故障是和开发程序代码