一、App的持续交付
1、概述
- 持续集成(Continuous Integration,CI)简单来说,就是:每次代码合入,都需要验证通过后,才可以集成到主干,这主要是为了保证产品在快速迭代的同时,还有比较高的质量;
- 持续交付(Continuous delivery,CD)是持续集成的下一步,简单来说,就是:频繁地将软件的新版本,交付给质量团队或者用户,以供评审。它强调的是,不管怎么更新,软件随时时随都可以交付。【非常高的标准】
- 移动开发中,Coding同时,还需要处理好交付(delivery)的事情,主要表现有:代码修改后要能马上出包,提供给QA、PM等团队验证;还需要处理诸如证书管理,打包,上传,发布这类工作。这些工作都是重复的,比较浪费人力的。
2、新变化
-
早期,Android&iOS团队使用Jenkins搭建App持续交付环境;但是由于Jenkins本身是一个通用的CI流程管理系统,并不提供直接提供ITunes Connect提包、签名、证书管理等此类与移动端业务紧密结合的功能,所以需要相当繁琐的配置才可以支持;
-
在这样背景下,fastlane出现了,它的定位是
iOS
和Android
应用程序最简单的自动化构建工具,它可以处理很多繁琐的任务,例如生成屏幕截图,处理代码签名,发布应用程序等;The easiest way to automate building and releasing your iOS and Android apps
-
fastlane本身可以和Jenkins等主流CI系统做很好的集成,将App的CI流程由fastlane来管理和执行,从根本上降低了相关配置的复杂度。
3、fastlane的更多可能
- fastlane除了能够无缝嵌入在持续测试和持续交付体系中(使用最多),还可以实现代码静态检查、产物存储和分析、构建日志分析、自动化验证等功能,这些是利用fastlane中已有的action和自定义action,结合其他工具实现。
- 熟悉和掌握fastlane的高级用法,能做很多有意思的事情。
二、fastlane简介
1、基本信息
-
fastlane是用Ruby语言编写的一套自动化工具集和框架,每一个工具实际都对应一个Ruby脚本,用来执行某一个特定的任务
-
fastlane允许使用者通过类似配置文件的形式,将不同的工具有机而灵活的结合在一起,从而形成一个个完整的自动化流程。
-
参考文档[中文版]:s0docs0fastlane0tools.icopy.site/
2、fastlane安装和配置
-
检查Ruby安装版本(至少2.0以上)
ruby -v
-
安装最新的Xcode命令行工具
# 如果已经安装,会提示`already installed`的 xcode-select --install
-
安装fastlane
sudo gem install fastlane -NV
-
设置语言环境为
UTF-8
,否则构建和上传的时候会有问题# 选择在 ~/.bashrc, ~/.bash_profile or ~/.zshrc添加如下内容: export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8
-
初始化
# 进入你iOS or Android项目,执行 fastlane init
- 安装提示输入必要的信息;Android的话,提示输入
Package Name
、json secret file
(按Enter)等,iOS的话,提示输入Your Apple ID
(苹果开发者账号)等; - 初始化成功后,工程目录下就多了一个 fastlane目录,该目录中有非常重要两个文件:Appfile和Fastfile。
- 安装提示输入必要的信息;Android的话,提示输入
3、Appfile和Fastfile
- Appfile:存储开发者账号和App相关信息,iOS为例的话,有app_identifier (bundle identifier of app)、apple_id(Apple email address)等;
- Fastfile自动化脚本配置文件,是最核心的文件,主要用于命令行调用和处理具体的流程,所有的事件驱动都是在这个文件来调度的。
三、Fastlane中重要概念
1、lane
-
lane是Fastlane中的任务,任务中由一个个的action组成的工作流
lane :custom_lane do # add actions here: https://docs.fastlane.tools/actions end
-
lane相关的生命周期
执行顺序 | 方法名 | 说明 |
---|---|---|
1 | before_all | 在执行 lane 之前只执行一次 |
2 | before_each | 每次执行 lane 之前都会执行一次 |
3 | lane | 自定义的任务 |
4 | after_each | 每次执行 lane 之后都会执行一次 |
5 | after_all | 在执行 lane 成功结束之后执行一次 |
6 | error | 在执行上述情况任意环境报错都会中止并执行一次 |
- 执行lane的命令:
bundle exec fastlane [lane_name]
2、action
-
Action是Fastlane自动化流程中的最小执行单元,直观上来讲就是Fastfile脚本中的一个个命令,而这些命令背后都对应一个用Ruby编写的脚本。
-
截止目前,Fastlane的工具集大约包含180多个Action,基本上涵盖了打包,签名,测试,部署,发布,库管理等等移动开发中涉及到的内容。
# 查看action列表 fastlane actions # 查看具体action 描述 fastlane action action_name
-
常用的action有:
- scan:自动运行测试工具,并且可以生成漂亮的HTML报告
- match:一个新的证书和配置文件管理工具。把所有需要用到的证书传到git私有库上,任何需要配置的机器直接用match同步回来就不用管证书问题了
- gym:自动化编译工具
- deliver: 自动上传截图,APP的元数据,二进制(ipa)文件到iTunes Connect
- pilot:管理TestFlight的测试用户,上传二进制文件
- spaceship:为pilot,boarding和deliver等工具提供和 iTC 和 ADC 的交互API。
-
Fastlane自定义Action【重要】
# 执行如下命令后,根据提示输入action_name,然后Fastlane会在当前目录的actions文件夹中帮我们创建了一个对应的的Ruby文件,在里面具体定义就好了 fastlane new_action
3、Plugin
- Fastlane 1.93开始,提供了一种Plugin的机制,它是在Action的基础上做了一层包装,这个包装巧妙的利用了RubyGems这个相当成熟的Ruby库管理系统,所以其可以独立于fastlane主仓库进行查找,安装,发布和删除。
- 我们甚至可以简单的认为:Plugin就是RubyGem封装的Action,我们可以像管理RubyGems一样来管理Fastlane的Plugin。
四、资料推荐
fastlane相关方面介绍也挺多的挺全面的,可以看以下这些资料:
-
比较完整的知识体系Overview:依葫芦画瓢!fastlane 官方文档思维导图
-
比较详细知识介绍可见:fastlane使用说明书
-
lane、action详细了解见:深入浅出 Fastlane 一看你就懂
-
想快速上手iOS自动打包可见iOS中使用Fastlane实现自动化打包和发布、iOS 持续交付之 Fastlane
-
Fastlane + Jenkins 搭建简单的 iOS 持续集成平台、构建、测试、分发!运用 Fastlane 与 Jenkins,完整的 iOS 持续交付指南
-
Ruby开发工推荐:jetbrains家的RubyMine。