请选择 进入手机版 | 继续访问电脑版

IT运维管理,ITIL,ITSS,ITSM,ISO20000-ITIL先锋论坛

 找回密码
 微信、QQ、手机号一键注册

扫描二维码登录本站

QQ登录

只需一步,快速开始

艾拓先锋
搜索
查看: 79|回复: 0

五大企业Netflix、Oracle、ING、思科、JFrog是如何做DevOps的?

[复制链接]
来自- 湖北武汉

参加活动:0

组织活动:0

发表于 2018-11-15 16:51:21 | 显示全部楼层 |阅读模式 来自- 湖北武汉
本帖最后由 adminlily 于 2018-11-15 16:58 编辑
0 D, ~) W* |" [) s( M% G+ v+ B  u9 V; ]6 Y! o) V$ ]6 C
* j6 `8 z* F; @# R

7 Q: d; A) s8 d
今天我分享的主题是《一站式软件交付:世界五百强企业的DevOps转型之道》,会讲到国内外的一些大型企业是怎么实现DevOps落地的,以及企业决策者通常会关注哪些DevOps带来的收益,希望本次分享可以帮助大家说服领导快速落地DevOps,提升企业的竞争力。
- [6 b6 S) G' f4 b( u$ R0 Z2 [
( v0 N) ]# L" c+ K# i7 Z

软件开发趋势

7 P: k/ F( q; G

! c0 P! m& {! S6 Y( ^+ Q# j
?wx_fmt=jpeg.jpg
7 ]" r! d7 y7 }! x+ @1 R6 q& r
/ F, O: E" h# I7 [) ?
众所周知,敏捷开发带来的是持续测试的能力,是把开发和测试的团队合在一起,实现一些持续测试。 DevOps目前主要做的事情是实现持续部署、持续交付,现在可以用一些灰度发布、金丝雀发布去做小规模的发布,但只是发布应用到某一部分的集群。
1 B& T" r& M* R- J

. m0 p7 K% ~# u- x, ~
就像谷歌所做的,比如Google地图现在想发布某个新功能,会先在公司内部发布或者是做一个小规模的发布,后面再做一些对外的发布,这是DevOps带来的一个好处。
- H( A! t* v) S5 f8 o/ m

- f. h7 R' d3 O- f2 y/ m# V5 {
?wx_fmt=jpeg.jpg

9 w2 g5 c- Q; r$ M
此外,DevOps还需要一些工具去实现。在构建方面,我们看到互联网公司里80%都在用Jenkins,因为Jenkins做实时构建、实时编译,平台本身是非常开放的,也有很多的插件可以支持单元测试、性能测试 。如果用付费版的软件,国外有一些做容器编译的比如 CircleCI 等。在测试环节,很多工具都是免费的,比如  Junit、Jmeter等。在部署方面,国内外主要是Ansible和Saltstack这两个用得最多,我们也有一些比较酷的工具,后面会展开介绍。

& ], \! \& u, W9 j* g

" r( a; T$ w, y% K  P
DevOps的工具链特别多,也比较复杂,所以企业要想办法去支持所有的工具链,因为我想要开发团队能够自由使用他们想用的工具,帮他们提高研发效率,而不是强制他去用某几种工具,所以落地DevOps平台是很重要的,因为需要用API的方式去对接各个工具链。

1 Z8 r! t! o# \% i: ~
, Q! B: y1 X1 J- F: g* D9 ^

DevOps的发展现状


- w& ?; ]8 g+ _4 L; d5 n2 v


8 v, i/ N4 L2 D3 r) ?

; k6 U& K7 [% e$ x7 ]8 _" Y$ G
?wx_fmt=jpeg.jpg
  V4 k* R0 ?' b# D

' j! e' D( ^$ t1 _; r  }; |) R
我们看看DevOps的发展状况,通过每年的DevOps现状调查报告,我发现了一个比较有意思的现象:就是前三年,公司内部叫DevOps工程师的员工数量增长了两倍,现在很多公司有专门的DevOps工程师,做创业的人都知道,之前你要找一个技术团队肯定是先找开发,再找运维,第三个再找DevOps,但现在很多硅谷公司,他们是DevOps和开发一起找,因为DevOps 工程师可以用很多较超前的工具做快速的发布。
& J! O. E7 i: }7 ?( W1 @% d

; h0 M5 b0 J# J: l8 a

DevOps的收益

/ q9 R6 Z1 c# {, Q. ~

8 k$ T. T0 G5 ?- _" C9 M, o2 \% n

2 R6 x. D: f& Z. Z, `
?wx_fmt=jpeg.jpg

9 z/ E' F" V& {& r8 K8 m/ F
  t0 U- r% R! v! ]' R  Y
) D; I7 B2 t: T
关于DevOps的收益,我们都知道,一键发布可以提高我们的软件交付速度,也叫做快速发布,但快速发布依赖于很高的自动化测试能力,自动化测试可以提高软件软件交付质量。但自动化测试工具和用例多了之后,测试的时间开始变长,开发需要等待时间很长,如果最后一步失败,这会浪费很多等待的时间,所有需要让失败的case在早期失败(Fail Fast),将下游的测试用例补充到上游测试用例,可从而避免在最后一步失败的问题。
8 ?9 @4 l8 }' U: W$ m1 l( p% t
; q7 m+ W5 ^. i* b6 E: U; x) C, L

DevOps全球开发者分布

: T8 h0 ^! @) h' h! X

* d9 ]3 S8 ]' ]3 p9 B0 e

  g5 C! g% g' m7 N7 M- ?
?wx_fmt=jpeg.jpg
; c- j) |6 U6 Z8 M  p3 o( W

$ {6 N& B; J, i' V/ [3 ?

" _0 t$ h9 e* W
我们看一下全球在做DevOps的公司分布。从上图可以看出一个很大的问题,就是亚洲明明有很高的消费能力,有很多智能手机的用户,但全球的DevOps工程师数量亚洲只占了10%,而欧洲和美国却占有全球最大的一部分,为什么?这也是我此次分享的一个目的,我希望大家都可以多做一些交流,多对外分享各自内部的DevOps实践。在欧洲,很多大的银行、保险公司都会分享他们内部的一些实践:怎么用亚马逊或公有云,用了哪些工具,如今中国国内也有越来越多的公司在分享,但也还比较局限于国内地区,我们需要扩大影响力。
8 ^% q" g6 O( O! S
  l8 }0 L8 J% X; {5 U

全球最超前做DevOps的公司

$ `6 P0 ]* l: k# `5 f) M


1 ]6 g; {  i1 i& A; b2 J- I. K


6 d; i- s( u0 o) B- l
?wx_fmt=jpeg.jpg
/ n! m( C7 v7 r5 N+ h+ @
4 [4 p- h" s6 p

2 C. Z, O& u1 |+ i+ m9 _
全球范围内哪些公司做DevOps最超前?我们这边有一些案例,谷歌云每周20亿次变更,都是用Kubernetes;我们认为Netflix是最超前做DevOps的公司,大家可能有看过《纸牌屋》,一个比较敏感的美剧,但Netflix不仅是拍美剧了,还占有全国60%的带宽,很多人坐沙发上看电影,在国外都是用Netflix。! ~3 t1 M' Q7 a9 r1 w4 c5 y' j
6 X( B* A. c/ ]4 R/ ~7 ^

$ H& [6 R4 I1 A4 x
还有甲骨文和思科,他们都做了一个一站式交付平台,封装了Jenkins、JFrog、Sonar 等测试工具去做统一的测试与部署,他们是属于大规模的DevOps。国内的腾讯和阿里,腾讯至少有两个团队在做相关的事情,一个是在做集中式的DevOps平台,另一个是负责蓝鲸,蓝鲸是一个非常强大的自动化运维工具平台。阿里巴巴在杭州有一个团队在打造阿里内部的平台- AOne,阿里的很多业务已经迁移到他们的平台上去做一站式的测试和部署。还有华为,我们知道至少有两个团队在做公司内部的DevOps交付平台,这也是特别超前的,做得效果也很不错。
( x# H- K6 o7 B( m5 O$ z% \) Z5 T

& n, }* l! f% @( Y7 T  C7 T" k5 m

这些公司是怎么做DevOps的?


' g1 u" f8 @- q* R1 u+ x: I4 {; Z+ E

3 R4 c3 D: \+ |: Y0 ?& Q4 \
下面是今天分享的重点,主要跟大家分享一些上述这些公司是如何超前地做DevOps,他们用了哪些工具,怎么评估团队,怎么说服领导,如何做一个自助式的DevOps平台 。
! w( N" C! F, u# ^* S3 y
1 y; s3 e& a& Z3 ~
第一,自助式DevOps

' g/ L' k0 R; \( l/ ?& a/ }+ f
/ a) L+ R8 C0 [$ |. _
?wx_fmt=png.jpg

0 ?; A2 ?/ {, r9 S
# `: n, e& M. h' f# e
就是在每个阶段要评估最好的工具,这里以腾讯为例,腾讯在前面做构建时,大部分是用Git,然后用Jenkins去构建,用容器的环境去跑构建的任务,比如说一个Jenkins任务跑到一个容器里面,构建完了,就可以很好地收集一些资源。而测试工具,值得一提的是SonarCube。SonarCube做单码扫描,它也是被用得比较多,像滴滴、百度、阿里等这些大互联网公司都在用。中间工件管理部分也是比较关键的,包括你的数据管理在每个阶段从提交代码一直到构建、测试,发布到什么环境,都是存在一个地方,所有的数据和包都是存在JFrog Artifactory里面,都要通过各自公司内部的标准区做流水线。最后部署和评估,很多公司在评估他们的DevOps数据,这个月和上个月底相比,发布到底有没有变得更加高效,我的测试突破率有没有比之前快。上图中提到的是我们评估用得最多的一些工具,当然每个阶段还有更多别的工具。

; q. {4 x% q1 Y$ R$ M6 B

% K- ]' \  W& ]4 o  @' u; {
第二,自定义流水线
, i: ~! ~0 w9 I  z( t

' W7 [/ `( a8 S( m" N' n
?wx_fmt=jpeg.jpg

9 h% m8 @( P" }: h

1 G: M$ o, C$ ~- V7 |
) i0 c$ r4 X. H9 U" ]1 k
不知道在座的有没用到Jenkins 2.0Pipeline插件,现在Jenkins创始人KK在每个大会上都会讲他的Pipeline插件概念,去年我参加了他在以色列的Jenkins大会,他在会上就发布了Pipeline插件。但不管是用Jenkins或者别的工具,都要把一些可重复使用的阶段,比如测试、部署放在一个模块化的CI流水线里面, 开发者就可以自己上线,自己发布。现在一些大企业的团队就是自己上线、自己发布,他们采取微服务架构,不设定有变更日,随时都可以独立发布自己的模块,不用要协同所有模块一起。大家可以尝试 Jenkins Pipeline 这个插件,是开源免费的。
" C% D! _$ g; w! V: e

6 I" Q$ D3 d5 X' W: b$ u7 |! i
在我们这个例子里面,做Maven 构建,然后搭建一个镜像,用镜像做一些测试,部署到测试环境里,那么做完各种自动化测试之后,就可以部署到生产环境。一些金融公司是要有一个员工审核的过程,也可以放在开发里面,开发可以发邮件、发短信等。
* \& B* L. k4 e$ \

5 S+ O: T( V8 F5 f4 w
记录生命周期元数据
1 q& j% R( a# R" k2 s' {

, @. [" ]& D& x- [
?wx_fmt=jpeg.jpg

  g) j  F  _# R  R; h
9 @7 P0 ?' K" D6 P

5 H+ d1 E) M& I, ]3 B; {$ E: s
这个过程会产生很多数据,每一步关键的数据都需要存在统一的地方,叫元数据。Jenkins和JFrog目前世界五百强里面大部分的企业都在用,JFrog有一个插件在Jenkins里面,安装之后,在构建时就可以把你的测试通过率,还有SonarCube的地址、部署的结果,以及你当时部署了什么机器,都跟构建包进行绑定,所以现在你公司内部所有的工件,不管是什么语言(可以看到图中左手边各个语言的包),都要根据DevOps团队的一个规范和标准去上线,如果这个包没有所有的元数据,没有所有的测试结果,而且没有这个QA,这个包就不能上线。这就等于在公司内部设置了一个质量关卡, 从开发、构建、测试到部署所有阶段的关键信息都是要放在一个地方才能实现流程的决策自动化。

1 J: X" L5 E# }7 [% d
制定软件交付质量关卡

, O8 m! s: T% p" g0 F0 j, R; c
?wx_fmt=jpeg.jpg

) D/ J9 A  B; g2 {# V3 ^

& t1 u$ C6 C& h& L: [' `$ G- ^9 g3 g' W
+ h* w7 j: U+ @/ W5 p* L2 v
质量关卡是一个比较老的概念,Jenkins和JFrog是怎么参与到这个过程中的呢?答案是用自动化测试供,通过把测试结果和这个包绑定,如果想要把发布的包从开发环境升级到测试环境,再到部署环境,必须得收集到特定