一、我们要解决的问题
无论是什么样的解决方案,一定要牢记我们要解决的问题是什么,切不能将解决方案当做问题本身。具体到过程改进,不管是何种方式的改进,它们所要解决的问题永远只有一个:缩短从产品想法到可用软件之间的时间周期。自动化发布正是如此,如果软件发布只做一次,我们说根本不需要自动化,但如果三次以上,那么软件开发的黄金法则DRY就必须遵守,让时间真正用到开发当中去。
二、与发布相关的问题
所谓自动化只不过是将原先手工做的工作谦让给机器做,所以自动化之前一定要先清楚与发布相关的问题有哪些,即使不自动化,这些工作也一个也不能少:
-
应用程序如何打包? 发布包能否追踪到SVN版本号?
- 对目标机器环境有什么样的要求?
- 配置信息是否需要根据目标机器信息做出调整?
- 应用程序如何安装和启动?
- 应用程序启动后如何切流量?
-
应用程序如何升级? 旧版本程序数据如何迁移?
- 升级过程中和结束后如何切流量?
- 应用程序如何卸载?
三、我们的方案
李安的少年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将环境的自动化部署与自动化测试串联起来,搭建起整个研发流程自动化平台:
六、小结
没有银弹,自动化所做的只是将之前手工工作交给计算机完成,需要做的工作一个都不能少,此外,我们还要多做一些封装或脚本工作,但是,当我们需要重复做这些事情的时候,价值就出现了。我们的目标永远是缩短从产品想法到可用软件之间的时间周期。让时间真正用到开发当中去。
分享到:
相关推荐
OpenWrt-Lede_18.06.02 OrangePi Zero wifi-xr819 and soc-audio enabled! OrangePi Zero 安装OpenWrt 能够实现wifi和播放音乐。 详细安装和操作步骤: First Run boot-config: ...
CentOS 7.9版本(CentOS-Userland-7-armv7hl-RaspberryPI-GNOME-2009-sda.raw.xz)适用于ARM32 (armhfp) CentOS是免费的、开源的、可以重新分发的开源操作系统,CentOS(Community Enterprise Operating System,...
标题中的“Pi-Star-RPi-V3.4.17-20-Jan-2019.zip”表明我们正在讨论的是2019年1月20日发布的Pi-Star 3.4.17版本,这是3系列的最后一个稳定更新,对于那些热衷于MMDVM操作的无线电爱好者来说,无疑是一个重要的里程碑...
Pi-Star RPi V4.1.2是2020年5月发布的一个更新版本,它提供了一种简单而高效的方式来搭建和运行MMDVM(多模数字中继系统),使得HAM们可以享受到更广泛的通信方式。 首先,我们要理解什么是MMDVM。MMDVM是由Jeff,...
**PI ProcessBook 2015用户指南** **PI ProcessBook**是OSIsoft PI System的核心组件之一,它提供了一个直观且高效的图形界面,让用户能够方便地查看和操作实时及历史数据。通过PI ProcessBook,用户可以实现以下...
用PWM PI控制DC-DC变换器配置仿真模型用PWM PI控制DC-DC变换器配置仿真模型用PWM PI控制DC-DC变换器配置仿真模型用PWM PI控制DC-DC变换器配置仿真模型用PWM PI控制DC-DC变换器配置仿真模型用PWM PI控制DC-DC变换器...
pi-yingsheqi-1.0.0.exe
压缩包内包含文档内容: 相信我,如果你想了解PI是怎么使用的,读英文官方文档吧。 PI JDBC Basics Learn How to Query PI.pdf PI-Data-Archive-2016-R2-Release-Notes.pdf PI-JDBC-Driver-2016-Administrator-Guide...
ARM树莓派系统镜像centos7-32位操作系统内核版本Linux bogon 5.4.28-v8.1.el7 #1 SMP PREEMPT Mon Mar 30 2
pi/4-qdpsk调制程序绘制眼图星座图
可用的pi/4-DQPSK matlab simulink仿真
**pi-pi-net 网络库:封装 Linux epoll 的利器** `pi-pi-net` 是一个专为 Linux 环境设计的网络库,它对底层的 `epoll` 系统调用进行了高级封装,使得开发者能够更加便捷地构建高性能、高并发的网络应用。`epoll` ...
标题 "PI-SDK-WEBService" 涉及的核心知识点是使用C#编程语言通过PI SDK(Process Information Software Development Kit)来开发一个WebService,以便于用户远程访问和操作实时数据库PI(Process Historian)。PI是...
《Fibre Channel –Physical Interface-7 (FC-PI-7)Rev 0.04 -2017》是美国国家标准协会(American National Standards Institute,ANSI)发布的一份关于光纤通道物理接口的重要标准,主要关注64G FC(64吉比特光纤...
标题中的“PI的AN--flyback资料”表明这是一份由PI公司发布的关于flyback(反激式)电源转换器的应用笔记(Application Note,通常简称为AN)。PI是一家知名的电源管理解决方案供应商,其AN系列文档提供了详细的电源...
在本文中,我们将深入探讨如何使用SAP集成平台(PI)发布SAP RFC函数作为Web服务,并通过Java进行调用。这个过程涉及到一系列步骤,包括创建RFC函数、配置PI、映射消息以及编写Java调用代码。 首先,我们需要在ECC...
~$ sudo cp pi3-miniuart-bt-overlay.dtb /boot/overlays 2、编辑/boot目录下的config.txt文件 ~$ sudo vim /boot/config.txt 3、添加或修改下面内容: dtoverlay=pi3-miniuart-bt-overlay force_turbo=1 4、关闭...
《树莓派实时状态检测表盘——深入解析pi-dashboard-master项目》 树莓派,作为一款低成本、功能强大的微型计算机...通过深入理解其工作原理,我们可以根据自己的需求进行定制,打造更加个性化的树莓派监控解决方案。
"pi-gpio-core-0.0.12.tar.gz" 是一个在PyPI上发布的开源软件包,其版本号为0.0.12,以tar.gz格式压缩,这是一种常见的用于在Linux和Unix系统中打包和压缩文件的格式。 **Python库** pi-gpio-core 是一个Python库...
**PyPI 官网下载 | Pi-Pin-Manager-3.0.0.tar.gz** PyPI,全称为Python Package Index,是Python社区官方维护的一个软件包仓库,它为Python开发者提供了一个发布、发现和下载Python模块的地方。在Python开发中,...