简书的图森破包子铺(App打包系统)

起这么一个标题应该不会被那啥吧。+1s

背景

这次我们来说说App打包,简书上有大量教程教你怎么搭建持续集成、怎么搭建Jenkins、怎么打App包、怎么上传fir.im等等。这些教程大部分达到的效果就是:登录Jenkins -> 找到对应job -> 构建 -> 自动上传FIR/蒲公英 -> Jobs History显示二维码,对于懒的人来说,这太麻烦了,我想要一步就开始构建,构建完成后直接给我反馈结果;另一个问题,大部分公司都是用一些老的MacBook或Mac Mini来搭建Jenkins,这台机器通常在内网中,外网是访问不到,除非有梯子,你要是外出或者回家了想打个包怎么办,我想要最简单的条件就可以打包。简书现在做到了在IM中发一条消息,打包就开始了,打包完成后我会收到一条消息,消息显示下载地址的二维码,真正的too simple,这也是名字的由来。领导看后说了一句:“你们搞的这个系统啊,excited!”。话不多说,赶紧上车。


效果

结构

首先我们来看一下整体的结构。


结构
IM

这一步要完成的是指定要打包的App,以及一些配置,代码分支、Release/Debug、ChangeLog等。
简书内部使用的IM是零信(原瀑布IM),它提供了两个很有用的扩展:Outgoing和Incoming。Outgoing是一个触发机器人,当消息命中了关键字,它会把这条消息POST到一个指定URL,也就是下一步要说的API Server。举个栗子:

zhao0:打包(iOS)

命中了关键字打包,Outgoing就把用户名、消息内容POST到Server。
Incoming则相反,我们可以向生成的URL POST一条消息,可以是文字或图片或链接,这条消息就出现在了IM中,在这里用来反馈结果,Incoming在其他监控方面用得挺多。我知道的其他IM有Slack也是支持这两个扩展的。这一步弄一个Web页面或者邮件也是可以的,思路是一样的。

API Server

API Server的任务非常简单,它维护一个队列,IM POST过来的消息入队;Client主动查询,Server收到GET请求就出队,队列可以是全局变量(重启就丢失了)、消息队列MQ、数据库。

Jenkins

Jenkins需要进行三步配置
1、参数化构建过程
参数化可以不改变构建脚本实现不同配置,类似于函数的参数,这里可以根据需要添加自己的参数,在脚本中通过${参数名}取到值。

参数化

2、远程触发构建
远程触发

简单地说这是支持通过一个URL触发构建,还可以传入参数。Token这里需要填入一个随便生成的字符串。
3、分配用户
新增一个用户专门用来触发构建,查看用户的API Token
API Token

这里顺便推荐使用Role-based Authorization Strategy插件来管理用户的权限。
三步好了之后,就可以通过这样一个URL触发构建,很容易在脚本中使用,注意替换所以大写的字段

http://USERNAME:APITOKEN@JENKINSADDRESS/JOBPATH/buildWithParameters?token=TOKEN&OTHERPARARMS
Query Client

Client负责定时从API Server拉任务,解析参数,触发Jenkins构建,由一段简单的Python/Ruby脚本就可以完成。从Server获得的消息保留了原来的格式,需要进行简单的匹配,组装成一个完整的URL,然后'curl -G url'就触发了。搭配crontab每隔几分钟执行一次。

到这里,整个系统就搭好啦,是不是很简单。

什么鬼

每个人的环境和需求有差别,这里给你指明了路子,有任何疑问可以在评论中留言。

关于fastlane

简书的iOS持续集成全部都用fastlane完成,fastlane本质上和写一堆shell script没区别,但是fastlane提供了大量现成的action,想要实现的功能几乎都有(实在没有也可以自己定制),把枯燥的shell代码变成简单的ruby函数(action)调用,Jenkins里只需要一行代码。

下回预告

fir.im开始按量收费了?Debug包不敢传到外部平台?安卓的apk可以直接下载,iOS的ipa怎么弄?下次将教你怎么自己搭建一个这样的平台,代码会开源,一键部署,等不及的就node install -g ipapk-server

写在最后

简书作为一个优质原创内容社区,拥有大量优质原创内容,提供了极佳的阅读和书写体验,吸引了大量文字爱好者和程序员。简书技术团队在这里分享技术心得体会,是希望抛砖引玉,吸引更多的程序员大神来简书记录、分享、交流自己的心得体会。这个专题以后会不定期更新简书技术团队的文章,包括Android、iOS、前端、后端等等,欢迎大家关注。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 129,400评论 18 137
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 164,677评论 24 698
  • 软件的持续集成工具之一,易上手,功能强大,话不多说,干货奉上。我的博客地址:http://blog.lzoro.c...
    格子Lin阅读 11,664评论 10 41
  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 10,386评论 0 15
  • 请给我一首诗的时间 清风带来远方的思念 微雨舞落 低唱安然 请给我一首诗的时间 青春走过生死的誓言 你若安好 便是...
    君若狸阅读 182评论 0 0
  • 最近上班被人多次告状,实在意难平。 每次一有错误的时候,身边的人总是先撇清自己,甩出各种证据,合作的人也竭力证明自...
    小熊猫哄哄阅读 224评论 0 0
  • 儿子读小学一年级了,在学校里各个方面的表现还算不错。最近他刚花了一周多的时间准备好了一个用英语讲故事的节目,要在儿...
    休憩的鹰阅读 180评论 1 3
  • 2 017.4.23晴 很开心,今天我学习轻而易举富足写作法21天脱变之旅,毕业啦。 在这21天里,我的收获颇多。...
    相爱相依娟阅读 237评论 1 0