看我司 DevOps 之路是否正确?
Posted K8S中文社区
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了看我司 DevOps 之路是否正确?相关的知识,希望对你有一定的参考价值。
导读:本文应该是有福利的 :)
图片来源:阿里云
原文:
https://www.zhihu.com/question/24413538/answer/145048082
DevOps 是什么呢?
我们先来看一张图
Dev, QA, Ops 的交汇处我们认为就是 DevOps。 实际上说白了,DevOps 就是把产品开发过程中各部门交汇处的活给干了,让各部门都专注于干他们自己的活儿。
依稀记得,刚进公司的时候,每天工作的大头就是给 QA, TA, PM, Boss编译各种版本的包,真正写代码的时间寥寥无几 :(
实际上,做过移动应用开发的都知道,ios 需要很多版本,inHouse, Adhoc, AppStore, 以及QA还需要各种不同的环境来测试相对应的功能,TA(自动化测试)也要各种版本,每个开发还需要自己独立的分支版本交付QA测试等。
尤其是我们团队采用的是 scrum 开发模式,基本每两星期就是一个迭代,上述的工作非常繁琐,重复性又大,Dev基本上每天都在被逼着给build,QA,TA,PM又在着急的等着build,每个人都怨气满满。
为了防止各方互相扔屎 :), 我们很快购买了一台 Mac Pro 作为编译服务器,在上面部署了Jenkins2.0。
V1.0 Jenkins Job只有几种类型,Inhouse,Adhoc,AppStore等几种最基本的Job
因为iOS不同的编译类型需要不同的证书,为了方便,我们把不同的证书打包成 diff 文件,
下图中这些不同后缀的Job 的配置中,会apply相对应的diff文件
此时虽然各方已经不互相扔 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功能。(该功能慎用,至于为什么自己去搜咯 :)
放出小部分脚本代码
#jenkins environment variable
jenkinsJOB_NAME = os.environ.get('JOB_NAME', '') ## MEANS This is running in jenkins ,not local
if jenkinsJOB_NAME:
#os.system("git reset --hard HEAD") #need run this in jenkins shell, otherwise will discard user's committed code
isInhouse = jenkinsJOB_NAME.lower().find("inhouse")
isHockeyApp = jenkinsJOB_NAME.lower().find("hockeyapp")
isAdhoc = jenkinsJOB_NAME.lower().find("adhoc")
isDevelopment = jenkinsJOB_NAME.lower().find("development")
isAppStore = jenkinsJOB_NAME.lower().find("appstore")
isTaXMN = jenkinsJOB_NAME.lower().find("ta-xmnlab")
经过好几次的升级之后,现在Jenkins Job基本都比较稳定了,如果某个开发需要提供自己所开发功能的build, 只需要 copy一份相对应的Job 配置, 改掉代码指向,就可以了,前后花费时间不超过 30s,甚至QA在需要的时候也可以自己手动触发Job编译自己需要的Build。从那以后,我明显能够感觉到漂亮的 QA妹子花在 Dev 单身狗身上的时间更少了,说好的天天喊我给Build的呢。
最后放一个小彩蛋,
不好意思,放错图了,
我们在Job的name 中加了一个 LED 的关键字,如果Job 编译成功了,绿灯,啥事也没有,但是,要是Job挂了,这个就会滴滴滴地响,你可以想象一下,在Jenkins上建几十个Job,然后让每个Job都挂掉,那真是蛙声一片。
不过这个还是得看个人需要吧,我们目前只有两个Job配置了这种高端货,并且只有失败的第一次会响三声。
来,赞一下:)
推荐阅读
-值得收藏
以上是关于看我司 DevOps 之路是否正确?的主要内容,如果未能解决你的问题,请参考以下文章
企业DevOps之路:Jenkins 集成 Harbor 自动发布镜像