fastlane二三小事

581 阅读6分钟

一、App的持续交付

1、概述

  • 持续集成(Continuous Integration,CI)简单来说,就是:每次代码合入,都需要验证通过后,才可以集成到主干,这主要是为了保证产品在快速迭代的同时,还有比较高的质量;
  • 持续交付(Continuous delivery,CD)是持续集成的下一步,简单来说,就是:频繁地将软件的新版本,交付给质量团队或者用户,以供评审。它强调的是,不管怎么更新,软件随时时随都可以交付。【非常高的标准】
  • 移动开发中,Coding同时,还需要处理好交付(delivery)的事情,主要表现有:代码修改后要能马上出包,提供给QA、PM等团队验证;还需要处理诸如证书管理,打包,上传,发布这类工作。这些工作都是重复的,比较浪费人力的。

2、新变化

  • 早期,Android&iOS团队使用Jenkins搭建App持续交付环境;但是由于Jenkins本身是一个通用的CI流程管理系统,并不提供直接提供ITunes Connect提包、签名、证书管理等此类与移动端业务紧密结合的功能,所以需要相当繁琐的配置才可以支持;

  • 在这样背景下,fastlane出现了,它的定位是iOSAndroid应用程序最简单的自动化构建工具,它可以处理很多繁琐的任务,例如生成屏幕截图,处理代码签名,发布应用程序等;

    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示意

二、fastlane简介

1、基本信息

  • fastlane是用Ruby语言编写的一套自动化工具集和框架,每一个工具实际都对应一个Ruby脚本,用来执行某一个特定的任务

  • fastlane允许使用者通过类似配置文件的形式,将不同的工具有机而灵活的结合在一起,从而形成一个个完整的自动化流程。

  • 项目地址:github.com/fastlane/fa…

  • 参考文档[中文版]: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 Namejson secret file(按Enter)等,iOS的话,提示输入Your Apple ID(苹果开发者账号)等;
    • 初始化成功后,工程目录下就多了一个 fastlane目录,该目录中有非常重要两个文件:AppfileFastfile

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相关方面介绍也挺多的挺全面的,可以看以下这些资料: