看我司 DevOps 之路是否正确?

Posted K8S中文社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了看我司 DevOps 之路是否正确?相关的知识,希望对你有一定的参考价值。

导读:本文应该是有福利的 :)


看我司 DevOps 之路是否正确?

图片来源:阿里云

原文:

https://www.zhihu.com/question/24413538/answer/145048082


DevOps 是什么呢?

我们先来看一张图


看我司 DevOps 之路是否正确?


Dev, QA, Ops 的交汇处我们认为就是 DevOps。 实际上说白了,DevOps 就是把产品开发过程中各部门交汇处的活给干了,让各部门都专注于干他们自己的活儿。


依稀记得,刚进公司的时候,每天工作的大头就是给 QA, TA, PM,  Boss编译各种版本的包,真正写代码的时间寥寥无几 :(


看我司 DevOps 之路是否正确?


实际上,做过移动应用开发的都知道,ios 需要很多版本,inHouse, Adhoc, AppStore,  以及QA还需要各种不同的环境来测试相对应的功能,TA(自动化测试)也要各种版本,每个开发还需要自己独立的分支版本交付QA测试等。


尤其是我们团队采用的是 scrum 开发模式,基本每两星期就是一个迭代,上述的工作非常繁琐,重复性又大,Dev基本上每天都在被逼着给build,QA,TA,PM又在着急的等着build,每个人都怨气满满。


看我司 DevOps 之路是否正确?


为了防止各方互相扔屎 :), 我们很快购买了一台 Mac Pro 作为编译服务器,在上面部署了Jenkins2.0。


V1.0 Jenkins Job只有几种类型,Inhouse,Adhoc,AppStore等几种最基本的Job

因为iOS不同的编译类型需要不同的证书,为了方便,我们把不同的证书打包成 diff 文件,


下图中这些不同后缀的Job 的配置中,会apply相对应的diff文件


看我司 DevOps 之路是否正确?


此时虽然各方已经不互相扔 shit 了,但还在互喷,主要问题在于Jenkins经常挂掉,而开发又没有及时去fixed。原因是在于我们的 App  集成了crash监控服务crittercism,它可以做到实时监控crash数据,汇报新的crash。但是开发每次都需要手动上传DSYM文件,很是麻烦。虽然我们用了Jenkins插件自动集成,不过Jenkins插件的支持很不好,经常在上传DSYM的时候GG(DOTA GG应该不用解释吧)。到了后面我们自己也忍不了了,就自己写了上传DSYM的脚本。


考虑到TA还需要自定义产品环境,App动态的版本号和 git commit 号等,我们就直接将所有的配置都用 python,shell 脚本实现,实现了基于Jenkins Job名字的自动化配置。


App编译结束后,我们会自动将生成的 IPA 包发布到所需要的渠道,我们使用HockeyApp自动发布和自动推送,而针对国内的网速,则是使用了http://fir.im .

还有针对Adhoc/App Store的上传TestFlight的神器,叫fastlane,其中Gym和Deliver两大神器结合使用最牛逼。可以全自动上传App Store,不仅傻瓜化好用,而且还带push notification功能。(该功能慎用,至于为什么自己去搜咯 :)


放出小部分脚本代码

 
   
   
 
  1. #jenkins environment variable

  2. jenkinsJOB_NAME = os.environ.get('JOB_NAME', '') ## MEANS This is running in jenkins ,not local

  3. if jenkinsJOB_NAME:

  4. #os.system("git reset --hard HEAD") #need run this in jenkins shell, otherwise will discard user's committed code

  5.   isInhouse = jenkinsJOB_NAME.lower().find("inhouse")

  6.   isHockeyApp = jenkinsJOB_NAME.lower().find("hockeyapp")

  7.   isAdhoc = jenkinsJOB_NAME.lower().find("adhoc")

  8.   isDevelopment = jenkinsJOB_NAME.lower().find("development")

  9.   isAppStore = jenkinsJOB_NAME.lower().find("appstore")

  10.   isTaXMN = jenkinsJOB_NAME.lower().find("ta-xmnlab")

经过好几次的升级之后,现在Jenkins Job基本都比较稳定了,如果某个开发需要提供自己所开发功能的build, 只需要 copy一份相对应的Job 配置, 改掉代码指向,就可以了,前后花费时间不超过 30s,甚至QA在需要的时候也可以自己手动触发Job编译自己需要的Build。从那以后,我明显能够感觉到漂亮的 QA妹子花在 Dev 单身狗身上的时间更少了,说好的天天喊我给Build的呢。


看我司 DevOps 之路是否正确?


最后放一个小彩蛋,


看我司 DevOps 之路是否正确?


不好意思,放错图了,


看我司 DevOps 之路是否正确?


我们在Job的name 中加了一个 LED 的关键字,如果Job 编译成功了,绿灯,啥事也没有,但是,要是Job挂了,这个就会滴滴滴地响,你可以想象一下,在Jenkins上建几十个Job,然后让每个Job都挂掉,那真是蛙声一片。


不过这个还是得看个人需要吧,我们目前只有两个Job配置了这种高端货,并且只有失败的第一次会响三声。

来,赞一下:)


看我司 DevOps 之路是否正确?


推荐阅读

  • -值得收藏


以上是关于看我司 DevOps 之路是否正确?的主要内容,如果未能解决你的问题,请参考以下文章

神结合,K8s+DevOps实践之路

02 基础设施/Gitlab - DevOps之路

企业DevOps之路:Jenkins 集成 Harbor 自动发布镜像

企业DevOps之路:Jenkins 流水线

你离成功的 DevOps 之路,只差大师的一次开光 | 活动通知

DevOps理论+实践之路