自动化代码发布系统实现

简介:
+关注继续查看

日常运维问题

 

在我日常运维工作中,代码发布可能是最普遍的一项工作之一,尤其是网页代码的更新,碎片化发布需求非常频繁。在前期开发人员比较少时,还可以由自己来上服务器通过脚本来发布代码。但随着公司项目的增多,更多的开发人员加入到公司,发布代码需求开始增多,这就占用了我大部分时间,经常的被打断其它工作来发布代码,非常地不爽,然后开始想解决方法。

 

尝试解决问题

 

当然,发布代码肯定是运维的职责之一了,但频繁的发布导致运维大部分时间浪费在重复的操作上,非常的不值得。基于此,开始限制代码发布频率,要求把不是很紧急的更新延后到一周中的几个时间点。但实施起来效果不理想,治标不治本,原因是你不能强制把需要立即上线的更改延后。实施这样的定时发布,有可能影响项目的快速迭代。

 

最终解决方案

 

想到这样子下去也不是办法,会造成工作很被动,于是开始着手建立以Web操作方式,结合git,rsync来实现自动代码发布。公司代码管理目前用的是svn,开发人员在发布前也没有打Tag的习惯,所以想到分布式的git来完成版本的管理,rsync当然是用来同步代码到其它服务器了。附上几张代码发布系统的截图:
首页
所有更新
提交代码

 

开源技术使用

 

  • rsync:用来同步代码到服务器;

  • git: 用来标记版本,回滚版本;

  • tornado: python的一个web构架,提供后台服务;

  • angularjs: 前端的一个mvc框架,用来实现浏览器与后端的交互,使得后端不需要关心前端网页的渲染,专注后端逻辑的开发。前端和后端通过json数据来通信;

  • bootstrap: 让运维人员写的网站后台UI也可以很专业。

 

代码发布流程

 

代码自动发布
从流程图可以看到,我们只需要把审核发布的权限交给开发组负责人,运维只需要维护系统的稳定,之后代码发布就不需要运维来参与了。

 

以上是整体的流程,现在来说详细说下具体的逻辑实现:

  • 1、开发人员提交代码更新,主要提交的字段包括“更新理由”,“svn代码路径”;

  • 2、后端收到请求后,把此数据插入到数据库,标记此更新单为“等待预发布环境更新”的状态;

  • 3、后台进程定时查询是否有等待预发布环境更新的更新单,如果有,读取svn路径,执行svn up更新代码操作,并标记此更新单为“预发布环境已更新,等待完成测试”;

  • 4、开发人员或者测试人员通过预发布环境的域名来测试功能是否正常,如果不正常,作代码修改后提交svn,再到web发布后台点击“返回修改”,对svn路径或者不做任何修改再点击“重新提交”,然后更新单又一次回到”等待预发布环境更新“状态。循环3、4步骤,直至预发布环境测试通过为止;

  • 5、在确认测试通过后,开发人员点击”测试通过“,这时更新单进入”等待审核状态“;

  • 6、负责人确认可以发布后,点击”审批“按钮,这时更新单进入”审核通过,等待执行发布操作“的状态。这时,开发人员得到发布代码的授权;

  • 7、开发人员点击”发布代码“按钮,更新单进入”已执行发布,等待系统完成发布“状态;

  • 8、后台进程查询状态为”已执行发布,等待系统完成发布“的更新单,执行git发布命令。git命令大概为,进入预发布代码目录,执行git add .;git commit -m "更新原因";git tag 上一次版本号+1,再进入已发布代码的目录,执行git pull同步预发布代码目录的更改。最后调用rsync命令同步代码到生产环境。

 

下面是回滚流程:

  • 1、进入web代码发布系统,选择已发布的版本,点击“申请回滚”;

  • 2、负责人审核此次回滚;

  • 3、开发人员执行回滚操作;

  • 4、后台查询“等待回滚”的记录,假如回滚的版本号为18,进入已发布代码的目录,执行git checkout -b 18 18;git checkout 18(这两条git命令作用为,以tag 18创建分支号为18的分支,并切换当前分支为18),然后再通过rsync命令来同步代码到生产环境,这样就实现了版本的回滚。

 

最后想说的话

 

最后想说的是,运维工作可以是枯燥的,也可以是有趣的。枯燥是因为没有意识或者懒得把重复的操作通过制定流程来使其自动化,在不断地把各种在运维工作中占用时间比较多的重复操作通过技术来使得自动化时,我们既高效完成了工作,节省了时间,又能提高编程和解决问题的能力,只有这样,我们才能让运维工作变得既有趣又有挑战性。

转载请标明文章来源:《https://www.centos.bz/2014/09/code-auto-deploy-system/



本文转自 msj0905 51CTO博客,原文链接:http://blog.51cto.com/sky66/1615823

相关文章
|
1月前
|
弹性计算 Java 数据库连接
架构设计第七讲:数据巡检系统之daily&线上表结构自动化比对
架构设计第七讲:数据巡检系统之daily&线上表结构自动化比对
|
2月前
|
数据采集 数据管理
【源码】LIS系统 实现检验信息电子化、检验信息管理自动化的网络系统
通过门诊医生和住院工作站提出的检验申请,生成相应患者的化验条码标签,在生成化验单的同时将患者的基本信息与检验仪器相对应;当检验仪器生成结果后,系统会根据相应的关系,通过数据接口和结果核准将检验数据自动与患者信息相对应。 能实现检验信息电子化、检验信息管理自动化的网络系统。
|
4月前
|
设计模式 Java uml
简单工厂VS工厂方法&手写自动化工厂——系统学习六
然而我的观点是工厂方法是为了解决自动化创建对象的问题;如何理解这句话?请读者朋友继续往下看。
|
6月前
|
机器学习/深度学习 人工智能 算法
借力计算机视觉及深度学习,纽卡斯尔大学开发实时、自动化奶牛跛行检测系统
借力计算机视觉及深度学习,纽卡斯尔大学开发实时、自动化奶牛跛行检测系统
|
6月前
|
机器学习/深度学习 人工智能 Dragonfly
一种AI自动化系统可以快速找到新的电池化学成分,比高强度人工测试要快得多
一种AI自动化系统可以快速找到新的电池化学成分,比高强度人工测试要快得多
|
Devops 测试技术 API
遗留系统的自动化策略
遗留系统的自动化策略
104 0
|
传感器 数据采集 安全
无线自动化采集监测系统
无线自动化采集系统主要由无线采集节点、数据采集基站、数据服务器和数据采集软件等构成。 无线振弦采集系统(NLM5或6多通道无线采集采发仪)是一种岩土工程监测仪器,它适用于各类振弦式传感器采集频率信号,(表面式应变计、混凝土应变计、钢筋应变计、内埋式裂缝计、表面裂缝计、土压力盒、锚索计等)。利用这些传感器可对大坝、桥梁、堤防、引水工程、建筑、市政地铁深基坑的内力、压力、沉降水平位移、变形,交通市政工程(船闸、铁道、地铁)以及高边坡等工程的应力、应变、变形、渗流、渗压等物理量监测和安全稳定分析,并广泛应用在健康监测领域。
无线自动化采集监测系统
|
安全 前端开发 测试技术
【web系统UI自动化】关于UI自动化的总结
【web系统UI自动化】关于UI自动化的总结
【web系统UI自动化】关于UI自动化的总结
|
JavaScript 前端开发 Linux
开发基于vue前端框架下的系统的UI自动化,记录总结踩的坑
开发基于vue前端框架下的系统的UI自动化,记录总结踩的坑
开发基于vue前端框架下的系统的UI自动化,记录总结踩的坑
|
传感器 数据采集 安全
振弦式无线数据采集器 无线自动化采集系统
无线振弦采集系统(NLM5或6多通道无线采集采发仪)是一种岩土工程监测仪器,它适用于各类振弦式传感器采集频率信号,(表面式应变计、混凝土应变计、钢筋应变计、内埋式裂缝计、表面裂缝计、土压力盒、锚索计等)。利用这些传感器可对大坝、桥梁、堤防、引水工程、建筑、市政地铁深基坑的内力、压力、沉降水平位移、变形,交通市政工程(船闸、铁道、地铁)以及高边坡等工程的应力、应变、变形、渗流、渗压等物理量监测和安全稳定分析,并广泛应用在健康监测领域。
振弦式无线数据采集器 无线自动化采集系统
热门文章
最新文章
相关产品
云迁移中心
推荐文章
更多