fastlane初体验

可持续构建和部署,对于移动端,尤其是iOS端,不是一件容易的事情。因为公司一开始就有专人在开发和维护可持续构建平台,所以这块并没有吃过太多苦。但是对中小团队的困境,我通过脑补,深有体会。直到fastlane横空出世,终于有一个神器可以大大减少无线开发者的重复劳动。fastlane在github上的star数量可以表明它受欢迎的程度。


fastlane初体验_第1张图片
image.png

fastlane通过一系列的lane和action/plugin,将CI/CD过程中主要的环节自动化起来。

image.png

因为苹果Developer Member Center和iTunes Connect的接口并没有公开,并且Xcode每年都要发版,带动MC和iTC也要跟着更新,所以fastlane发版非常频繁。比如最近发布了2.38.1版本,以支持iOS 11和Xcode 9。

本来想写一个讲一下fastlane的基本使用,直到我找到一篇绝好的文章:fastlane Tutorial: Getting Started,我觉得我就没有必要费这个劲儿了。

这篇文章非常欢快地把App从创建、打包到提交审核等关键流程都介绍了一下。只要对着文章把相关的变量,比如bundle id改成自己的就行。

image.png
fastlane初体验_第2张图片
image.png
fastlane初体验_第3张图片
image.png

以前提交审核最苦逼的事情莫过于等待苹果处理完二进制,然后才能勾选上做测试或者提交审核,fastlane甚至会一直等待二进制处理完,并且帮忙做后续处理,所以不用再守在电脑旁边啦。不过提交审核需要用户最后确认一下关键信息,这个还是比较关键的,自动化做了也不太放心。

基于fastlane做一个可持续构建平台是一件非常容易的事情。事实上,只要构建平台的机器上安装了fastlane,用户执行一下fastlane ios release就好了,fastlane接管了所有的工作。构建平台要做的是提供机器和一些必要的UI界面,比如查看日志。事实上,主流的CICD平台也都在积极拥抱fastlane,比如travis-ci和flow.ci。

我也尝试一下在Jenkins里面运行fastlane。下载和安装好Jenkins之后,创建一个项目,接着去配置项目,添加一个脚本如下。因为在网页中没法做交互选择,所以记得指明FASTLANE_ITC_TEAM_IDFASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD这两个环境变量。

fastlane初体验_第4张图片
image.png

接着点立即构建,可以去控制台看到很多日志,可以看到最后构建成功了。

fastlane初体验_第5张图片
image.png
fastlane初体验_第6张图片
image.png

Mac上有两个坑。一个是如果在Jenkins官网下载Mac OS X的pkg包安装,安装完成之后,就会启动Jenkins服务,这个服务是以Jenkins这个用户启动的,各种无权限访问当前用户资源。并且这个进程用kill -9杀死后还会重启,感觉有服务在保护它。

$ ps aux | grep jenkins
jenkins          82494   0.0  0.8  4435172  67252   ??  Ss   12:23下午   1:04.30 /usr/bin/java -Dfile.encoding=UTF-8 -XX:PermSize=256m -XX:MaxPermSize=512m -Xms256m -Xmx512m -Djava.io.tmpdir=/Users/Shared/Jenkins/tmp -jar /Applications/Jenkins/jenkins.war --httpPort=8080

为了绕开这个问题,我手动启动Jenkins,并且把端口改成9090,这样就是以当前用户启动的服务。

$ /usr/bin/java -Dfile.encoding=UTF-8 -XX:PermSize=256m -XX:MaxPermSize=512m -Xms256m -Xmx512m -Djava.io.tmpdir=/Users/Shared/Jenkins/tmp -jar /Applications/Jenkins/jenkins.war --httpPort=9090
$ ps aux | grep jenkins
henshao          89248   0.1  3.0  5155436 249804 s000  S+    4:01下午   1:27.86 /usr/bin/java -jar /Applications/Jenkins/jenkins.war --httpPort=9090

另外一个坑就是提示下面这个错误。解决这个问题只需要在脚本的最前面增加#!/bin/bash --login就好了。

rvm is not a function selecting rubies with 'rvm use ...' will not work

最后再推荐一下Fastlane实战这几篇文章,真的非常棒。

你可能感兴趣的:(fastlane初体验)