时间来到8102年,但是很多中小团队还是缺少持续交付,打包发布还是处于原始手打阶段使得工程师们不能安安心心写点代码,明明今天还有很多bug需要修改,突然测试工程师跑过来说赶紧给我出一个包,这时候你不得不停下手头的工作,默默的给他打个包。
另外对于敏捷开发的团队来说,产品需要随时跟进目前进度,或者“老板们”需要体验一下最新的成果,有一个便捷的地方随时可以安装最新的包对于团队来说也是无比重要的。
目标
测试:可以自己随时通过jenkins构建最新包,然后通过一个小工具直接装最新的版本。
产品:可以随时通过小工具查看,最新的研发成果,随时安装最新的版本。
好了,说了持续交付的重要性,那么准备下材料吧:jenkins+git服务器(我们现在用的gitlab,下文都直接说gitlab)+fastlane
+蒲公英+mac机器。当然还有很多其他方案,譬如最简单的jenkins+git服务器也能搞定,多加一个fastlane
是未来便于扩展,蒲公英方便安装,就看你要做到什么程度。
po一个效果图:
mac机器
关于mac机器有很多种选择,公司如果有闲置mac mini
,iMac
之类的最好直接利用,黑苹果或者台式机装虚拟机再装mac os费事费力,花费的人力物力已经超出闲置mac mini
,iMac
了。
因为这两种情况我都经历过,以前在Camera360就用过服务端淘汰下来的1U的服务器搭建过虚拟机,不过那个机器是64核,128G的内存,才能撑起Camera360这种体量的工程,普通mac mini
打个包要耗费40分钟,如果在测试阶段,测试每天要包的频次变大时,很难负荷,利用1U的高性能机器可以缩短至20分钟。土豪团队可以考虑高配版iMac
或者垃圾桶。
有了Mac
机器就是配置各种环境,首先必备的是Xcode
,然后是fastlane
。
fastlane
安装
sudo gem install fastlane
安装蒲公英的 fastlane 插件
fastlane add_plugin pgyer
然后进项目目录进行初始化
fastlane init
执行上述命令后,会在我们的项目目录下面生成一个 fastlane
目录,我们唯一关心的就是其配置文件 Fastfile ,配置gym和pgyer参数,更多参数可以参考gym文档和pgyer文档
platform :ios do
desc "发布 测试版本 到 蒲公英"
lane :pgy do
#把最近的一个git commit当做当前版本的描述
git_log = sh("git log --no-merges -1 --pretty=format:'# %ai%n# %B by %an'")
gym(
scheme: "iospgy",
export_method: "enterprise",
output_directory: "output",
configuration: "Release"
)
pgyer(
api_key: "811e984eb5e760bb7f2885484c6c4edb",
user_key: "15943af593e531aef0b1f7d6c70d4131",
update_description: git_log
)
end
end
配置完了之后就可以试试用命令打包,在项目根目录执行
fastlane pgy
jenkins和gitlab
这两个东西的安装网上有一大堆教程,如果公司有运维,可以直接让他们帮忙装,如果没有,自己用的云服务器厂商一般也提供docker一键安装。如果也没有云服务器,本机装一个也很快。
配置jenkins节点
有两个关键点需要注意一下:
1.jenkins和你准备拿来做打包机器的mac电脑是否在同一个网络,如果不在,最好通过vpn等方式连接,否则用jenkins自带的javaweb连接不稳定,后期维护相当吐血。
2.如果执行fastlane
等命令报错“fastlane: command not found”
,则需要配置一下PATH
,红框框内容。
PATH可以在命令行输入
echo $PATH
得到值之后拷贝进去就可以了
配置好jenkins节点之后就可以新建项目了
然后配置项目的git地址
根据项目需求配置触发规则,我现在是用的定时任务,每天6点,12点,19点自动触发打包,定时规则可以谷歌搜“jenkins 定时任务”
然后配置执行脚本,一般选用shell
脚本
最后写具体的shell
执行代码就可以了
蒲公英
由于蒲公英没有iOS版本,所以只有根据文档自己开发一个,否则的话自动打完包还需要把二维码发出来给需要的人扫,相当不方便。根据文档,蒲公英提供接口,让你访问自己所有的上传的APP,并且根据安装APP文档,可以组装好相应的协议。这样就可以实现,通过一个APP安装我们相应版本的功能了。
为了方便大家使用,可以参考我自己开发的一个iOS版蒲公英。clone下来改一下apikey
和appkey
就可以直接使用啦。
远程构建
要使用jenkins远程构建首先需要安装一个插件Build Authorization Token Root Plugin
,如下图:
安装完毕后,去自己的账户下拿token
然后点开jenkins上的工程勾选允许远程构建,并且填写上一步拿到的token
最后在项目里面发起相应的http请求就可以了,具体格式在勾选远程构建的选项下面可以看到。
注:远程触发jenkins是需要授权的,具体可以通过charles抓手动点击触发jenkins构建时的http头可以拿到,或者可以直接写代码
let user = "your username"
let password = "your password"
let credentialData = "\(user):\(password)".data(using: String.Encoding(rawValue: String.Encoding.utf8.rawValue))!
let base64Credentials = credentialData.base64EncodedString()
let headers = ["Authorization": "Basic \(base64Credentials)"]
Alamofire.request("place your url", method: .get, parameters: nil,encoding: URLEncoding.default, headers: headers) .responseJSON { response in
}