维基百科上,DevOps(Development和Operations的组合词)是指一种重视软件开发人员(Dev)和IT运维技术人员(Ops)之间沟通合作的文化、运动或惯例。通过自动化软件交付和架构变更的流程,使构建、测试、发布软件能够更加快捷、频繁和可靠。
6 q3 D# p3 F/ Y. Z! F- w
现在,即使对了解过DevOps甚至是已经在使用这种研发模式的人来说,也难以定义到底什么是DevOps。有些观点认为,DevOps区别于传统的瀑布模式,基于敏捷模式,并将敏捷思想和实践从开发扩展到运维(也有激进的观点认为它完全不同于这两种研发模式),是一种新的思维模式和行动方法。
/ `, q$ X' M" A+ Z( o/ ]5 i
一、DevOps发展简史
5 o! [9 O7 t4 s
在2008年举办的敏捷大会上,Patrick Debois和Andrew Clay Shafer首次提议讨论了“敏捷基础架构”这个话题。在第二年的敏捷大会上,两名Flickr员工做了题为“10+ Deploys per Day: Dev and Ops Cooperation at Flickr”(“每天10次部署”)的演讲,这可以看作开创了我们现在所说的DevOps的概念。
6 W9 [5 d: a' S9 g" T/ l
之后它激发着Patrick在同年10月于比利时根特市举办了第一届DevOpsDays,这代表着DevOps推广的开始。
- C0 R9 j- `/ [6 ]; F J
从那以后,DevOps借助DevOpsDays在全球范围内传播,并于2019年达到顶峰—全球有80座城市在2019年举办了DevOpsDays。2019年10月28日到30日,全球各个国家和城市的DevOps活动组织者和推广者齐聚比利时根特市,举办了DevOpsDays十周年庆典。
4 B! G* ^3 b5 Z
相比欧美国家,DevOpsDays进入中国相对较晚,2017年3月18日北京举办了第一届中国DevOpsDays,并于接下来几年陆续在上海和深圳也分别举办了DevOpsDays峰会。
( L# |7 r* r- _3 O2 q+ L5 B$ u
由于DevOpsDays对中国DevOps行业的影响,2018年7月22日,中国DevOps社区成立,并迅速发展到全国18个城市,通过本地化的DevOps Meetup等小型活动在各个城市继续推广DevOps。
5 ~+ L9 E3 @ A# p% |
除了DevOpsDays,另一个标志性事件是Alanna Brown在2012年起草了第一版年度 《DevOps现状报告》。从2012年起,这份年度报告就被DevOps业界和从业人士作为了解DevOps现状的参考以及DevOps发展方向的风向标。
3 d# \. H# g3 C' \! Y; K4 v. {! p
另外,2013年Gene Kim出版了小说体的《凤凰项目》一书,通过描述一家正在经历DevOps转型的企业,生动形象地向读者介绍了转型过程中的思想碰撞,以及各种问题和相关的解决方法。
/ y0 H0 r* X7 V1 G) P
2016年,Gene Kim联合Jez Humble、Patrick Debois和John Wills合力出版了DevOps业界最具权威的经典著作:《DevOps实践指南》。图1-1给出了DevOps 10多年的发展历程。
& L- p: i+ \ ?+ O/ D
8 I! B6 k7 S& ~! ~$ B
(图1-1 DevOps发展史)
3 P2 }8 ^1 P- \: `0 G$ M
二、DevOps理念
- u0 O$ S# K- O5 P7 k! D5 H n
DevOps的目标是提升整个研发效能,进行更便捷、更快速、更可靠的交付,从而提高产品竞争优势。DevOps模糊了以往研发模式中开发、测试、运维等岗位和角色的界限,加强了他们之间的协作,甚至鼓励将各个角色从传统的专家团队的组织结构,重新编制成全功能团队,用以加强协作(如图1-2所示)。
' g% B& |3 d- J
; w7 z$ R5 q' D) p
(图1-2 DevOps组织结构转变)
# g2 V- R9 g# u* d: k# h
技术层面上,则通过流水线和一系列自动化机制、成熟可伸缩的基础设施(如云)等,使开发人员获得更高的效能,从而更加频繁且快速地将代码变为产品,并从这种快速中获得持续不断的反馈和验证,以获得更高的可靠性。
- L. I5 \- i5 m: K1 l+ k8 }. n
为了能够达到DevOps的目标:更便捷、更频繁地进行更可靠的交付,除了思维模式和文化以外,DevOps也需要一些技术和工具来支撑。也是得益于一些基础设施和工具的发展和成熟,才使得越来越多的公司能够践行DevOps。
) w' F" W# e" c' L
从目前业界的最佳实践来看,DevOps技术和理念主要包括几个关键的要素:
5 e+ g& G6 w/ X" v% J2 w
- 持续集成(Continuous Integration,CI)
- 持续交付(Continuous Delivery,CD)
- 微服务(Microservice)
- 自动化测试
- 基础设施即代码(Infrastructure as Code,隐含了虚拟化、容器、自动编排、配置即代码等技术和理念)
- 监控和日志(Monitoring and Logging)等! @4 e+ v/ u3 E
" G+ I; m4 U; J4 i) V9 m* {
0 [) |7 O: s: O& h( r r, @
! j/ u& g, F0 j; p业界围绕DevOps已经形成了一系列的工具集合和解决方案。
/ s( u' E0 K5 K% P
最终,通过文化意识的改变和自动化工具的使用,DevOps能够带来的价值也是很明显的,包括:
& R3 j$ ]( K* V% A7 J( {
不仅仅是互联网行业,包括很多传统的金融、零售、制造等行业也在尝试DevOps。
7 E- ]& o" H2 F5 q# ^
在如图1-3所示的传统模式下,在整个研发流程(需求、开发和测试)完成之后和上线前需要进行安全评审,以保证应用的安全性。因此,简单来说,整个软件开发的交付周期就是研发时长加上安全评估的时长。
' ?, U0 `5 R8 o f h
(图1-3 从传统模式到DevOps模式)
' y% x% } Q1 R/ ^1 g. ?7 R
在DevOps模式下,我们通过自动化、敏捷开发、团队协作、微服务设计等DevOps理念和技术手段,提高了研发效能。研发阶段的时长缩短了,从而也减少了整个交付周期的时长,提高了交付速度和效率。
, x& G& x. [) q- g+ J. s* Z" m0 q2 N
然而,由于传统的DevOps模式没有考虑安全,因此上线前的安全评审时长并没有改变。从图1-3可以清晰地看出,在DevOps成熟的情况下,团队继续提高研发效能的瓶颈已经不在研发阶段,而是在上线前的安全评审阶段。
, ^1 f. p3 s% \) N7 I; E
那么,如何在DevOps模式下进一步改进研发效能,提高交付效率呢?另外,从安全的角度考虑,瀑布模式下的传统应用安全模式(比如SDL)已经无法跟上DevOps模式下越来越快的交付速度了,因此需要摸索出一套适合不停迭代和快速交付的全新应用安全模式的方法论。
0 A) w0 @7 |8 u1 l1 m
三、从DevOps到DevSecOps
: Z @" \& P. n1 y
上一节我们用一个图简单描述了从传统研发模式到DevOps模式的转变。然而,传统DevOps主要考虑速度和质量,并没有考虑信息安全。所以,在DevOps比较成熟的情况下,信息安全就变成了研发效能继续改进的瓶颈。
0 z3 z1 i& h( |# o; Y( z2 c+ ~ z
DevSecOps的最终目的就是通过安全左移到开发测试团队,使安全评审阶段的时长变短,从而进一步缩短交付周期(如图1-4所示)。并且它可以在更早的阶段发现并修复安全漏洞,从而减少上线前发现安全漏洞的返工成本。
/ ]# i* q' ^1 Y' \9 h
(图1-4 从DevOps模式到DevSecOps模式)
+ o4 a! j' C6 y/ P/ r8 O
DevSecOps是Gartner在2012年就提出的概念,其原始术语是DevOpsSec。2017年RSA峰会之后,DevSecOps开始成为世界热门话题。DevSecOps延续了DevOps的理念,其设计与执行仍然处于Agile的框架之下。
7 Q% q2 `, z! l+ U* [: S
DevSecOps的目标是将安全嵌入到DevOps的各个流程中(需求、架构、开发、测试等),从而实现安全的左移,让所有人为安全负责,将安全性从被动转变为主动,最终让团队可以更快、更安全地开发出质量更好的产品。
2 E. n% d1 g/ ~2 s: G1 S
所谓安全左移,在实践中就是为了让团队对他们开发的内容负责,通过将安全等工作(比如测试安全)从部署前的安全评审阶段左移到更早的阶段,从而更早、更快地发现并解决安全问题,而不是等到几天后部署时才发现,或者几个月后再发出渗透测试报告。
# E t$ o$ q6 U& \7 |+ y
DevSecOps的出现并非偶然,它是软件持续交付演进的必然产物。在这种新型软件交付模式下,安全行为会散落在软件交付的各个阶段,而安全的职责也会落在各个阶段的参与者身上,而不再是主责落在安全团队身上。
! y5 `& {3 a4 z& [ F# ~
DevSecOps可以给研发效能提供诸多好处,主要表现在以下三个方面(见图1-5):
3 V" b/ R& D! a. H5 W1 U/ j# s, C
(图1-5 DevSecOps相比DevOps的好处)
7 C0 r% V/ N4 f, d3 s8 r
- 交付更快: U, A* H7 s2 f( l" w
! H. y; H* T" Q' P
9 b2 Q& R' n) n4 q9 i. i& C* `. f
DevSecOps通过自动化安全工具扫描,无感地左移了部分传统模式中在上线前最后阶段进行的安全扫描工作,使整个交付周期变得更短,交付速度因此变得更快。