你的DevOps中有完善的持续交付体系么?

背景:

DevOps已经成为软件开发领域一个炙手可热的名词。敏捷开发、持续交付、CI/CD,K8s…这些主流的开发理念、工具无一例外都与DevOps有着很强的联系。这种环境影响下,传统的运维团队均开始向DevOps进行转型。一时之间运维开发、SRE、工程效能工程师需求量大增,无论公司大小,都会开始着手DevOps的从0到1的建设。我们开始搭建工具链、部署流水线、集成自动化测试工具、开发自动化发布系统……一切的一切都是为了完善我们自动化体系,从而提高开发效率,优化产品质量。
那么问题来了,你团队所建设的DevOps体系,已经是完善的DevOps了么?

正文:

我们如何去评估目前DevOps中持续交付的建设情况呢,这里笔者总结了一些我们在DevOps初期应该进行的一些工作,这些工作大多数属于工具链的集成,我们可以对照下述十四条关卡,来验证一下我们的DevOps建设中持续交付这一环节是否走在了一条正确的道路上吧。

1, 版本控制

版本控制是指通过记录软件开发过程中的源代码、配置信息、环境、数据等,快速的恢复及访问任意一个版本。版本控制最主要的功能就是追踪文件的变更。
常用版本管理工具:git

2, 最优分支策略

分支的种类很多,大多数团队会使用到主干分支、开发分支、临时分支、功能分支、预发布分支、bug修复分支等等。那么如何选择一个最优分支策略,是我们开发团队必须去规范的一件事。分支策略与版本发布频率之间有一定的相关性,我们要根据自己团队开发模式以及项目迭代周期来选择最优的分支策略。

3, 代码静态扫描

代码静态扫描需要从下面几个维度进行检查:复杂度分布、重复代码、单元测试统计、代码规则检查、注释率、潜在BUG、结构与设计。通过在构建pipeline中加设代码静态扫描的质量关卡,确保我们的代码可以达到一个可发布的级别。
常用的代码静态扫描工具:如SonarQube

4, 80%以上单元测试覆盖率

提高单元测试的意义最重要的一点是保证代码所对应的功能正常、而单元测试覆盖率的检查是以一种约束方式来规范开发人员使用单元测试,通过设置单元测试覆盖率的关卡来保障开发代码的正确性,并让单元测试逐渐地变成开发习惯。

5, 漏洞扫描

每个项目中,高达99.9%的代码来自于外部依赖,为了避免重复造轮子,我们引用了大量的外部开源框架及组件,这些外部依赖是否有安全,是否存在高危漏洞,开发人员一般是无法关注到的,所以我们需要一款产品可以集成到我们开发的IDE、设置成为构建流程pipeline中的质量关卡、无缝的对接到我们的制品库中,来扫描我们所有的外部依赖。
常用漏洞扫描工具:JFrog Xray

6, 制品管理

制品是构建过程的产出物。包括软件包、测试报告、应用配置文件等。制品管理是对软件研发过程中生成的产物的管理,一般作为最终交付物完成发布和交付。你所管理的制品可以统称为二进制文件,制品仓库则可以提供所有二进制文件的管理能力,提供全语言的依赖解析能力以及收集整个软件生命周期的信息与制品关联。
常用制品管理仓库:Artifactory

7, 开源协议扫描

开源协议有上百种,宽松程度不一。是否允许商用、是否可以修改、修改后是否需要继续开源等都是每种协议特有的特性。我们作为用户,作为开发者,为了提高开发效率,避免重复造轮子,难免会引用大量的外部组件及框架,那我们在DevOps建设过程中则必须注意对开源协议的管理及扫描。
常用的开源协议:
? Apache 2:直接使用须保留原始许可声明,若对其进行修改,需向用户说明。
? MIT:必须保留原始许可证声明
? BSD:必须保留原始许可证声明,部分版本不得使用原作者姓名用于软件销售
? GPL:若包涵GPL代码,整个项目则必须使用GPL许可证。
常用的协议扫描工具:JFrog Xray。

8, 不可变基础设施

不可变基础设施是指任何基础设施实例在部署后永远不会被修改。如果需要以任何方式更新,修复或修改某些内容,则会使用一批新的实例去替换,并在经过验证后,将新的基础设施实例上线,替换掉旧的实例。这种在当年在物理机或虚拟机上无法快速实现的这种不可变基础设施的理念,随着docker的普及正在飞快的发展,我们可以通过容器的方式快速的实现。这种模式可以为我们减少配置管理的负担,并使得 DevOps 更加容易实践
最佳实践方式:Docker

9, 集成测试

集成测试是在单元测试的基础上,把软件单元按照软件概要设计规格说明的规格要求,组装成模块、子系统或系统的过程中各部分工作是否达到或实现相应技术指标及要求。

10, 性能测试

性能测试方法是通过模拟生产运行的业务压力量和使用场景组合,来测试系统的性能是否满足软件的性能要求。通俗地说,这种方法就是要在特定的运行条件下验证软件系统的处理能力。

11, 变更管理

在google的SRE体系中,变更管理是DevOps体系中最为重要的一个部分。根据以往的经验,90%的线上故障是由于线上变更导致的,该变更原因包括软件、硬件、环境等所有因素。建设变更管理体系目的就是为了快速定位线上问题,止损由于变更造成的线上故障,及时通知相关人员做好故障预防工作。所以,变更管理体系也是需要我们重点去建设以及完善的。
落地方式包括但不限于下述几点:
? 运维人员、对应的开发及测试人员、产品经理等微信通知
? 大屏滚动播放最近的变更记录
? 变更记录同步到监控系统

12, 功能开关

功能开关概念很容易理解,通过功能开关我们可以在运行过程中对某一功能进行启动和关闭,在敏捷开发模式下,为了快速迭代,在某些团队没有完全准备好的情况下,我们可以通过功能开关的方式将新功能上线并通过配置屏蔽该功能,直至所有团队准备就绪,整个功能涉及到的服务全部上线后,可以打开此功能开关,提供用户使用。
通过功能开关的方案,我们可以快速迭代,不必进行复杂的集成测试及大版本交付,实现真正的敏捷开发、小步快跑。

13, 较高的接口测试覆盖率

提高接口测试覆盖率就意味着我们可以提高自动化测试的覆盖率,在每次构建流水线中可以自动部署我们的项目,通过接口测试来实现基础的自动化测试。另外接口测试可以提供给运维平台一个监控服务是否稳定的依据,我们可以通过监控平台实时触发接口测试,来判断线上的服务是否依然稳定运行。通过这种接口测试,我们可以最快的速度定位到某些线上某些功能的故障。

14, 零停机发布

无论使用蓝绿部署、还是金丝雀发布,我们的目标只有一个,就是零停机发布。零停机发布是指在对用户不停止服务的前提下进行版本的迭代,修复bug、引用新功能等操作。是否拥有一个健全的零停机发布体系也将是我们DevOps建设中十分重要的一个步骤。

总结:

DevOps并不是我们建设起来工具链就可以实践的一个理念,文中所介绍的十四个关卡也仅仅是DevOps体系中小小的一部分。开发团队组织架构的合理性、安全风险管理能力、技术运营、需求管理、架构设计、工程师文化等都是我们DevOps建设过程中需要探讨的课题。

原文地址:https://blog.51cto.com/jfrogchina/2464105

时间: 2024-10-11 13:47:19

你的DevOps中有完善的持续交付体系么?的相关文章

[转载]持续交付和DevOps的前世今生

作者/分享人:乔梁,20年IT老兵,腾讯公司高级管理顾问,敏捷和精益开发专家,持续交付领域先行者.曾就职于百度,国内多个知名互联网公司的企业教练. 历年QCon技术大会的讲师和专题出品人. 这是一个新概念风起云勇的时代. 就让我们从云端抓它几个名词下来,一起玩耍吧!!! “敏捷软件开发”,“增长黑客”,“持续集成”,“DevOps”,“精益创业”,“持续交付”,“大数据”... ... OK,就这四个啦: “敏捷软件开发”,“持续集成”,“DevOps”,“持续交付”. 先让我们在Wikiped

云端基于Docker的微服务与持续交付实践

云端基于Docker的微服务与持续交付实践笔记,是基于易立老师在阿里巴巴首届在线技术峰会上<云端基于Docker的微服务与持续交付实践>总结而出的. 本次主要讲了什么? Docker Swarm Docker Swarm mode 微服务支持(Docker集群架构体系) Docker的发展趋势和前沿成果 在Docker技术方面还是很佩服大牛的,所以赶紧写下笔记,追随大神的脚步. 阿里云资深专家易立,技术就不说了,他比其他直播间硬生生多讲了半个多点,于情于理还是万分感谢本次分享的(可惜devOp

Docker学习总结(7)——云端基于Docker的微服务与持续交付实践

本文根据[2016 全球运维大会?深圳站]现场演讲嘉宾分享内容整理而成 讲师简介 易立 毕业于北京大学,获得学士学位和硕士学位:目前负责阿里云容器技术相关的产品的研发工作. 加入阿里之前,曾在IBM中国开发中心工作14年,担任资深技术专员,负责IBM企业平台云产品线PureApplication System的研发工作:还负责和参与了一系列IBM在Web 2.0,SOA中间件的研发和创新,也曾为全球客户提供SOA技术咨询和项目实施. 日程 大家好,我演讲的主题是<云端基于Docker的微服务与持

[持续交付实践] 安全扫描自动化测试平台实现

前言 TesterHome有人专门加了我QQ问安全测试这个话题,所以这篇准备先聊聊持续交付中的安全测试.现在信息安全已经上升到了国家战略的高度,特别是今年<中华人民共和国网络安全法>颁布后,用户隐私通过国家立法的方式被严格要求保护,另外一方面安全灰产行业风起云涌,形成了一个巨大的地下产业链条和破坏能力.在此背景下,越来越多的互联网公司也开始组建自己的安全职能部门,但也会发现很多公司的软件并没有经过专门的安全测试便运行在互联网上,它们携带着各类安全漏洞直接暴露在公众面前,其中一些漏洞甚至直指软件

【腾讯Bugly干货分享】Android Patch 方案与持续交付

本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57a31921ac3a1fb613dd40f3 Android 不仅系统版本众多,机型众多,而且各个市场都各有各的政策和审核速度,每次发布一个版本对于开发同学来讲都是一种漫长的煎熬.相比于 iOS 两三天就能达到 80% 的覆盖速度而言,Android 应用版本升级至少需要两周才能达到 80% 的升级率,严重阻碍了版本迭代速度.也导致市场上 App 版本分散,处理 bug 和投

持续交付实战

公司间竞争体现在产品.技术.效率.运营等多个维度,业务发展要求技术leader从团队.技术.流程.标准多管齐下保证自己负责的维度不成为公司瓶颈.万事万物同理,公司或团队的发展也可以理解成三个阶段:温饱.脱贫.致富.各个阶段都有相应的建设套路,并不是一步到位就合适,温饱阶段随便几个码农就把事干了,为难的问题是脱贫到致富的升级,需要一系列技术手段以保证研发效率的提升,同时各路大神也有多种忽悠的套路.需要leader为团队量身定做一套合适的升级方案并执行到位.研发效率的核心就是交付效率(其次是质量和人

基于Jenkins,docker实现自动化部署(持续交付)

前言 随着业务的增长,需求也开始增多,每个需求的大小,开发周期,发布时间都不一致.基于微服务的系统架构,功能的叠加,对应的服务的数量也在增加,大小功能的快速迭代,更加要求部署的快速化,智能化.因此,传统的人工部署已经心有余而力不足.持续集成,持续部署,持续交互对于微服务开发来说,是提高团队整体效率不可或缺的一环.合理的使用CI,CD能够极大的提高了生产效率,也提高了产品的交互质量.本文不对三个概念做过多的介绍,有兴趣可以读读这篇文章:The Product Managers' Guide to

[持续交付实践] 基于 sonarqube 的代码检查平台实现

前言 公司此前用的一直是的SonarQube5.1(2015年版本,为兼容jdk6和jdk7的项目一直没有升级),最近为了pipeline的集成刚刚升级到了最新的SonarQube6.5版本.网上对SonarQube6的介绍比较少,这里重点先介绍下SonarQube6以后的一些新增特性.1.代码问题重新分级,将问题分为bug.漏洞.坏味道:将代码检查结果从可靠性.安全性.可维护性几个角度进行问题分类和风险分级.2.更丰富的代码检查规则,更友好的问题处理曲线展示,更清晰的质量阈和代码规则定制.3.

运维与持续交付

在互联网的产品开发时代,产品迭代越来越频繁,"从功能开发完成直到成功部署"这一阶段被称为软件开发"最后一公里". 对于持续部署,@湾区日报 这样评论: 一个团队工程技术水平高低,直接反映在部署代码上.我碰到其他公司的人,都喜欢问你们怎么部署代码的,非常大开眼界.你很难相信,很多(有一定规模的)公司仍然是人肉 SSH 到十几.二十台机器上 git pull.手动重启服务器,部署一次代码几个小时 -- 这么原始,活该加班:) 持续部署(continuous deploy