一、我们要解决的问题

无论是什么样的解决方案,一定要牢记我们要解决的问题是什么,切不能将解决方案当做问题本身。具体到过程改进,不管是何种方式的改进,它们所要解决的问题永远只有一个:缩短从产品想法到可用软件之间的时间周期。自动化发布正是如此,如果软件发布只做一次,我们说根本不需要自动化,但如果三次以上,那么软件开发的黄金法则DRY就必须遵守,让时间真正用到开发当中去。

二、与发布相关的问题

所谓自动化只不过是将原先手工做的工作谦让给机器做,所以自动化之前一定要先清楚与发布相关的问题有哪些,即使不自动化,这些工作也一个也不能少:

  1. 应用程序如何打包? 发布包能否追踪到SVN版本号?
  2. 对目标机器环境有什么样的要求?
  3. 配置信息是否需要根据目标机器信息做出调整?
  4. 应用程序如何安装和启动?
  5. 应用程序启动后如何切流量?
  6. 应用程序如何升级? 旧版本程序数据如何迁移?
  7. 升级过程中和结束后如何切流量?
  8. 应用程序如何卸载?

 

三、我们的方案

李安的少年Pi正在狂刷票房,我们的自动化发布方案也要跟上潮流:Puppet+CI我们的少年Pi。

Ø 使用CI自动化打包,追踪每个发布包的SVN版本;

Ø 使用Puppet管理发布包、目标机器环境、应用程序配置信息以及应用程序线上生命周期;

Ø 使用伽利略系统提供应用程序的命名服务和进行流量切换。

现在应用程序的发布需要两步:CI一键打包、puppet指定应用程序版本SVN提交。

 

四、具体方案

具体方案也就是如何解决与发布相关八个问题的过程。

1.         如何安装、升级和卸载应用程序

我们使用操作系统原生包管理系统来安装、升级和卸载应用程序,我们的应用程序打出RPM二进制包。免安装,所有机器自带,绿色的,有机的。

打包:rpm -ba ./team_member-1.spec

安装:rpm –ivh team_ member-2.0.1-48.x86_64.rpm

升级:rpm –U team_ member-2.0.1-49.x86_64.rpm

卸载:rpm –e team_ member-2.0.1-48.x86_64.rpm

程序升级前要停旧版本服务怎么办?旧版本数据要做处理怎么办?RPM已经帮我们料理好这一切,只要写出spec文件,剩下的交给我们。尽情的插入吧:

2.         如何管理目标机器环境和应用配置信息

应用程序已经打好rpm包了,但这还不够,应用程序发布到哪台机器上?应用程序对目标机器有什么要求?发布时需要修改哪些配置和参数?实际发布如何执行,难道需要登陆到每台目标机器运行rpm命令吗?

我们使用Puppet来搞定这一切,Puppet是现在应用第一的devops工具,它通过master/agent的工作模式管理机器。我们通过声明来控制我们的机器达到目标状态。同时,所有puppet文件全部在SVN里,所有对机器的修改全部codereview和可审计。

如何管理应用程序发布到哪台机器上?在回答这个问题前我们必须将应用程序在线上的生命周期再进行一次封装。

应用程序TeamMember被我们封装成一个puppet module,配置文件和参数被封装在对应templates和files里,每次发布前都要修改配置文件和传递不同的参数?out了吧,puppet帮你传参搞定:

Teammember.conf文件内容:

封装完成后的效果是这样的:

最后在管理部署的site.pp文件里声明一下,应用程序TeamMember的2146版本就被自动部署到10.128.34.141.test.back.shequ这台机器上了,我们后续的工作也就是维护这个site.pp文件了,所有应用程序的部署信息都在SVN被集中管理起来:

登陆到每台目标机器运行rpm命令?No!现在TeamMember已经被封装,我们修改完毕site.pp并提交后,puppet就自动执行命令了,要不怎么说是自动化呢。(现在puppet默认在agent每半小时同步一次,但同时支持马上触发执行)。

3.         如何追踪每次发布的SVN版本号

我们使用CI进行应用程序的打包,将build号作为包命名的一部分:

4.         如何在发布过程中切换流量

这是另外一个很大的话题,参见伽利略计划。

 

五、下一步工作

使用CI将环境的自动化部署与自动化测试串联起来,搭建起整个研发流程自动化平台:

 

六、小结

没有银弹,自动化所做的只是将之前手工工作交给计算机完成,需要做的工作一个都不能少,此外,我们还要多做一些封装或脚本工作,但是,当我们需要重复做这些事情的时候,价值就出现了。我们的目标永远是缩短从产品想法到可用软件之间的时间周期。让时间真正用到开发当中去。

少年Pi的奇幻漂流-我们的后台自动化发布方案相关推荐

  1. 《少年pi》:每个人心中都有一只孟…

    <少年pi>:每个人心中都有一只孟加拉虎 鸿爪 发布于: 2012-11-22 06:06 在<少年pi>的制作特辑里,李安谈到了对影片的理解:拍这部电影是他认识自己.认识世界 ...

  2. 英语影视台词---一、少年派的奇幻漂流

    英语影视台词---一.少年派的奇幻漂流 一.总结 一句话总结:Life of Pi 1.如果我们在人生中体验的每一次转变都让我们在生活中走得更远,那么,我们就真正的体验到了生活想让我们体验的东西.? ...

  3. 贾扬清演讲实录:一个AI开发者的奇幻漂流

    简介:2021阿里灵杰AI工程化峰会,贾扬清深度解读阿里灵杰大数据和AI一体化平台. 演讲人:贾扬清 演讲主题:一个AI开发者的奇幻漂流 活动:2021阿里灵杰AI工程化峰会 对于绝大多数人来说,这一 ...

  4. 我的世界末日求生系列服务器,末日生存 少年pi

    前提! 服务器有正版验证!!!服务器有正版验证!!!服务器有正版验证!!! 重要的事说三遍,没有正版的同学可以自己入正,可以用支付宝的!: 目前是B站主播少年Pi的整合包(已降低难度) 链接:http ...

  5. 从南极到你家,易开得,一支“中国芯”的奇幻漂流

    2023年的AWE,精彩程度比我想象中还要夸张! 一方面是热度空前,现场人头攒动,有一家老中幼三代一起来观展的,有经销商.客户来问价采购的,还有行业媒体举着单反.手机.摄像机激情拍照的,让我们正经见识 ...

  6. 贾扬清演讲实录:一个AI开发者的奇幻漂流丨2021阿里灵杰AI工程化峰会

    演讲人:贾扬清 演讲主题:一个AI开发者的奇幻漂流 活动:2021阿里灵杰AI工程化峰会(2012年12月3日) 对于绝大多数人来说,这一波AI浪潮兴许是从深度学习开始的. 2011年谷歌发表的一篇文 ...

  7. 中国版鲁滨逊:潘濂的奇幻漂流《一个人不能失去在生活中挣扎的能力》

    潘濂(1918.3.8-1991.1.4)是一名中国水手,他曾孤身一人在南大西洋上漂浮了133天,靠捕鱼.捉鸟和雨水为生.可以说是现实版的少年派,至今仍保持着无人能打破的救生木筏维生纪录. 潘濂在英国 ...

  8. 《少年派的奇幻漂流》观后感

    你从派的嘴里看到了什么?宇宙.自然的神奇力量?或是创造万物的造物主代替罪恶的人类受苦?亦或是人赖以生存的信仰.目标?我不清楚,但有一点可以肯定,派从那个神话故事中女人的嘴中看到了上帝.     派的父 ...

  9. flask实现后台java实现前端页面_java实现telnet功能,待实现windows下远程多机自动化发布软件后台代码...

    java实现telnet功能,待实现windows下远程多机自动化发布软件后台代码 package com.org.softwore.util; import java.io.IOException; ...

  10. 抖音的奇幻漂流:为什么TikTok让用户如此着迷?

    作者:读芯术 来源:读芯术 TikTok正像风暴一样席卷全球.据Sensor Tower的数据显示,这一短视频App在苹果应用商店和谷歌Play商店上的全球下载量已经超过了20亿.它背后究竟有什么魔力 ...

最新文章

  1. Leetcode-最佳买卖股票机含冷冻期
  2. file_get_contents 在本地测试可以, 但在服务器上报错403
  3. automatic asynchronous creation if no note exists
  4. 文本过滤--grep 1
  5. 学python能做什么-非计算机专业的人学python能做什么?
  6. php爬虫伪造请求头,Nodejs 伪造IP 爬取图片
  7. G - Calculation【欧拉公式降幂】
  8. 教你10分钟电脑配置挑选装机速成攻略
  9. HCTF 2017 bin Level1 Evr_Q Writeup
  10. Java面试必背八股文[6]:Redis
  11. ACO-OFDM与DCO-OFDM的区别
  12. 读懂 SSD – 什么是顺序读写、随机读写、4K读写、IOPS值?
  13. 如何做好检测报告的质量控制?-LIMS2
  14. 大概是全网最详细的Electron ipc 讲解(三)——定情信物传声筒port
  15. 文献解读 | 单细胞转录组助力解析水稻早期花序的发育轨迹机制
  16. 使用内网穿透实现外网访问本地接口
  17. 关于“提升产品质量”和“提升测试能力” (三)聚焦
  18. 精选ASP毕业设计91套——源码+论文完整资源
  19. Java简介超详细整理,适合新手入门
  20. Qt执行bash命令并获取返回结果

热门文章

  1. 当在浏览器中输入 Google.com 并按下回车之后发生了什么?
  2. SSM SpringBoot vue快递柜管理系统
  3. 网络工程师 第1章 计算机网络概述
  4. oracle数据库长连接和短连接,tcp 长连接与短连接
  5. 小葵花妈妈课堂开课了:《Runnable、Callable、Future、RunnableFuture、FutureTask 源码分析》
  6. win10更换自己喜欢的鼠标样式,马里奥、wow、lol都可以哦
  7. 编写Java程序,使用抽象类和抽象方法构建不同动物的扑食行为,抽象类设计
  8. 手动释放ubuntu内存
  9. this的指向为什么是undefined
  10. SpringBoot使用Nacos作为配置中心服务和服务注册中心