谈 DevOps 平台设计:版本号相关功能的设计

标签: dev | 发表时间:2019-11-08 00:00 | 作者:
出处:http://itindex.net/relian

在设计 DevOps 平台时,笔者认为版本号的管理是一个绕不开的课题。可是,行业里似乎很少人提这个事,笔者觉得要谈一谈,所以就有了这篇文章。

一万个人的眼里有一万个“版本号”

笔者这三年在同一家公司里,换岗换了四个团队。团队的成员组成各异,有的团队都是在大型跨国企业跳槽过来的,有的团队大部人都是刚毕业的。

每到一个团队,团队运行一段时间,都会做一件事情:讨论该怎么定义这个版本号。版本号的制定,有些只有开发人员参与,有时会有产品经理参与,有时还有 PMO 参与。

经过这些讨论,我发现:一万人的眼里有一万个“版本号”。讨论的最后,基本上就是谁的嗓子大,听谁的。

所以,在讨论“版本号”之前,一定要搞清楚讨论各方对于“版本号”的理解,再深入讨论,否则,大家谈的都会是牛头不对马嘴的东西。浪费时间。

为什么对于“版本号”,各方的理解,差异会如此大。笔者认为,主要是因为他们关心的面不同。

APP产品经理关心的是该APP在用户界面上显示的版本号,比如当前爱彼迎的APP的版本号是:1.9.44.china。

对于后端开发工程师,关心的是网关服务的版本是1.2.1、客服服务的版本是4.11.1。

对于前端开发工程师,关心的是通用组件的版本是2.1.1、首页组件的版本是3.1.1。

而对于 PMO,他们可能只关心在 Staging 环境的最后一个版本是否为一个稳定的版本(这写在他们的管理规范里),保证不影响测试人员的工作,根本不关心具体的“版本号”是多少。

重新认识版本号

各方的关注点不同,不是问题,但是我们作为一个平台的设计必须对“版本号”有更深入的理解。

笔者分析各方的关注点,他们所说的“版本号”分布在以下两个层面:

  1. 技术层面:程序员关心线上跑的是哪份代码(对应的是Git\SVN中的Commit ID)、运维关心线上跑是哪个版本(对应的就是具体哪个包)。

  2. 业务层面:方便终端用户识别的版本号,产品经理也属于这一层面。

认识到这点,我们设计DevOps平台,就会对两种版本号进行区别对待,进而设计出对团队非常有用的功能,最终帮助团队更好的实现交付。

为方便沟通,技术层面的版本号,如 Commit ID 我们称为 技术版本号,业务层面的版本号,称为 业务版本号

版本号相关功能设计

但是版本号有什么用?仔细想想,除了产品经理发布时要定个版,后端服务的版本用于保证服务之间的相互引用或调用不出问题,就没有什么别的用处了。

也许是因为大家都不了解版本号的用处,也或者是认为它根本就不值得讨论,所以,笔者在国内的几个大的平台都没有看到版本号的相关功能的设计。唯一使用到版本号的地方就是在制品库,部署时需要指定制品的版本号。而业务版本号与技术号之间的关系被隐藏得很深,用户很难查到。

笔者不想一开始就谈它的好处。我直接上功能,下图是笔者臆想出来的。

笔者认为,DevOps 平台应该有的功能之一:能输出这么一幅图,暂定名为版本关系图。图中的方块下,同时标有业务版本号和技术版本号。而图中的系统之间的连接线是应用系统的调用链,读者可忽略。

版本关系图应该能提供以下信息:

  1. 系统应用之间的版本依赖。

  2. 系统内部所依赖的组件的版本。

  3. 能根据某系统的版本查到目前直接依赖于或间接依赖于它的其他系统。

  4. 各系统的版本变迁信息。

这些信息能给用户带来的价值如下:

  1. 团队内信息更透明,沟通效率更高,可以有效避免某个员工成为单点。你不必等其他成员,自己也可以得到整个系统的版本信息。

  2. 可以提高团队成员的排错能力,因为当A发布新版本后,APP 首页打开变慢,有了版本关系,我们可以首根据整个平台的“版本事件”来排查问题。同时,团队也很快可以找到相应的代码变更,然后进行 review 及修复。

  3. 上图中,当 A 服务是一个集群时,我们还可以将部署的目标机器与版本号关联起来了。这样,团队就可以轻松的知道,哪台机器部署了哪个版本。

上图只是整个业务系统的某个时间点的“快照”。事实上,我们还可以在版本号上做更大的文章。比如让技术版本号与代码质量、构建速度等过程指标关联起来,这样我们可以在不同的版本之间进行对比。再比如计算两个业务版本号之间,代码质量的差异,长期积累下来这些数据后,我们就有能力计算出代码质量与业务指标之间的关系。

总的来说,版本号就是整个研发流程中的各项指标数据的枢纽。

后记

版本号和其它数据的关系的价值,笔者认为被大大低估了。希望本文能给 DevOps 平台设计者带来不一样的想法。


图片地址:https://pixabay.com/zh/photos/road-drone-aerial-trip-travel-4564817/

相关 [devops 平台 设计] 推荐:

谈 DevOps 平台设计:版本号相关功能的设计

- - IT瘾-dev
在设计 DevOps 平台时,笔者认为版本号的管理是一个绕不开的课题. 可是,行业里似乎很少人提这个事,笔者觉得要谈一谈,所以就有了这篇文章. 一万个人的眼里有一万个“版本号”. 笔者这三年在同一家公司里,换岗换了四个团队. 团队的成员组成各异,有的团队都是在大型跨国企业跳槽过来的,有的团队大部人都是刚毕业的.

『DevOps 最佳实践』 — DevOps 平台 - Ledge DevOps 知识平台

- -
DevOps 数字化转型框架. 企业为什么需要一站式综合研发平台. 越来越来多的组织开始搞敏捷和 DevOps 转型,打造了很多的 DevOps 基础设施,比如有管理需求的 Jira, 有持续集成的 Jenkins,有容器编排的 K8S 等等. 可是这纷繁复杂的 DevOps 工具链,同时也给企业带来新的困扰.

谈DevOps支撑平台实施收益和价值02(10.21)

- - 人月神话的BLOG
在9.18日自己谈过一篇DevOps平台实施收益和价值的文章,在当时主要提到了以下三点. 企业研发管理过程的标准化和规范化. 协助企业进行微服务架构转型的关键支撑. 今天准备进一步来扩展谈下里面的一些关键内容. 记得在几年前自己的一个朋友,原来是做工程设计咨询的,但是在规划设计项目中逐渐发现了有不少的信息化软件开发需求,刚开始的时候走的全部外包但是发现不好管理和持续.

对DevOps流水线设计的优化和改进实践(201014)

- - 人月神话的BLOG
对于DevOps过程支撑平台,我在前面已经写过相应的文章. 在整个DevOps平台的建设过程中可以看到持续集成和持续交付始终都是平台的一个重要内容. 而在整个持续集成和交付过程中,流水线设计又是相对关键的一个内容. 通过流水线设计可以很灵活的通过可视化配置的方式,将我们软件持续集成中涉及到的编译构建,打包,部署,代码检查,测试,环境迁移等各种活动编排在一起,形成一个自动化执行的完成流程.

DevOps 实战

- -
DevOps 的 3 个支柱. 第 1 步:寻找合适的试点项目. 第 3 步:快速建立初期成功. 第 4 步:快速展示和持续改进. 第一阶段:每次提交触发完整的流水线. 第二阶段:每次流水线触发自动化测试. 第三阶段:出了问题可以在第一时间修复. 第二步:定义指标并达成一致. 第三步:建立自动化执行和检查能力.

DevOps实践一:DevOps概述 - 知乎

- -
DevOps系列文章包含了本人在工作中的实践和认知理论,现总结并分享出来,希望能够给“迷你型”团队在DevOps上的实践提供一个“反面教材”和可行性建议. 本系列主要包含以下文章(过程中可能也会有所更改):. DevOps实践一:DevOps概述. DevOps实践二:持续集成、持续交付和持续部署.

『DevOps 最佳实践』 — DevOps 实践

- -
Culture – 文化:公司各个角色一起担当业务变化,实现有效协作和沟通;. Automation – 自动化:在价值链中尽量除去手工步骤;. Lean – 精益:运用精益原则更频繁地交付价值;. Metrics – 度量:度量并使用数据来优化交付周期;. Sharing – 分享:分享成功和失败的经验来相互学习.

让DevOps起作用

- - InfoQ cn
根据Neil Garnichaud在Dr. Dobb’s上发表的文章《 究竟什么是DevOps》,想要频繁地发布高质量的软件,首先需要弄清如何使开发人员、QA人员和运营人员在一起协同工作. 在软件公司里,特别是在开发基于云的网络应用, 而又缺少有才华的、合格的员工的公司中,压缩的时间进度和最低限度的QA是压力的根源.

DevOps,你真的了解吗?

- - IT经理网
与大数据和PRISM(NSA的监控项目之一),DevOps(开发运维)如今是科技人士挂在嘴边的热词,但遗憾的是,类似圣经,每个人都引用DevOps的只言片语,但真正理解并能执行的人极少. 根据CA的一项 调查,45%的受访者并不了解DevOps的含义,其余则有17%认为DevOps只不过是炒作. DevOps如今几乎成了创新的同义词,但其原本的含义却在业界的流传中被人们弃之脑后.

Kubernetes 会不会“杀死” DevOps?

- - InfoQ推荐
DevOps 这个概念最早是在 2007 年提出的,那时云计算基础设施的概念也才刚刚提出没多久,而随着互联网的逐渐普及,应用软件的需求爆发式增长,软件开发的理念也逐渐从瀑布模型(waterfall)转向敏捷开发(agile). 传统的软件交付模式(应用开发人员专注于软件开发、IT 运维人员负责将软件部署到服务器运行),再也无法满足互联网软件快速迭代的需求.