猪小花1号

个人签名

283篇博客

FastLane工具调研

猪小花1号2018-08-27 17:39

FastLane是开源的工具套件,提供了一个简便的方式自动化构建以及发布Android和iOS的应用,只需一个命令就可以完成整个打包、测试、发布流程。
FastLane官方就提供了很多的开源命令行工具,当前用户也可以自己方便的进行扩展自己的工具集合。

FastLane安装

FastLane是基于Ruby开发的脚本集合,支持Mac和Linux系统,安装的话系统需要先安装Ruby2.0.0以上版本,然后执行命令sudo gem install fastLane -NV 即可。

FastLane在Android工程中的使用

1、进入到Android工程的根目录执行fastLane init,会在根目录创建fastlane文件夹,按照提示输入应用的包名,提示的Jsonkey可以跳过,主要用于应用上传到GooglePlay的
2、在fastlane目录下可以看到Appfile和Fastfile文件,Appfile主要是用于存储命令行下提示输入的数据,也可以本地添加修改,fastfile用户存储整个打包、测试、发布流程的命令行集合

3、fastfile文件是命令行默认生成的,我们可以在里面新增我们需要的命令操作

 

fastlane_version "2.7.0"

default_platform :android

platform :android do
  # 可以在每个工具集合开始之前执行的命令
  before_all do
    # ENV["SLACK_URL"] = "https://hooks.slack.com/services/..."
  end

  desc "Runs all the tests"
 # 每个lane就是一个自动化流程集合,可以自己定义做哪些事情
  lane :test do
    gradle(task: "test")
  end

  desc "打测试包,通过内测分发平台发布"
  lane :beta do
    gradle(task: "assembleRelease")
    # 可以通过命令获取到构建后的返回值,具体有哪些参数可以传递,哪些返回值可以使用,可以通过命令 fastlane aciton gradle 来查看,gradle就是本次构建的一些参数
    puts lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH]
    # 获取上次Tags代码到当前分支最新代码的commit记录
change_log = changelog_from_git_commits puts lane_context[SharedValues::FL_CHANGELOG] number = number_of_commits puts "changelog=" + change_log puts "number=" + number.to_s # 这里是自己封装的一个简单action,下面会有介绍 result = app_hz(authoremail:"kevinkong@corp.netease.com",productkey:"105c4",appname:"FastLane测试",appnotes:"测试内容",app:"#{lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH]}") # 支持执行自己的脚本 # sh "your_script.sh" # You can also use other beta testing services here end desc "Deploy a new version to the Google Play" lane :deploy do gradle(task: "assembleRelease") supply end # You can define as many lanes as you want after_all do |lane| # This block is called, only if the executed lane was successful # slack( # message: "Successfully deployed new App Update." # ) end error do |lane, exception| # slack( # message: exception.message, # success: false # ) end end

  完成以上配置之后,您可以把Fastfile和appfile也上传到代码仓库中,如果需要测试包分发的时候,只需要在跟目录命令行下执行 fastlane android beta 即可,其中android是platform:android ,beta是lane:beta 的命名。


Fastlane自定义Action
有时候官方提供的工具集不够,也可以自定义编写aciton,开发流程如下:
1、项目跟目录下输入 fastlane new_action
2、按照提示输入自定义的action名称,比如我们的app_hz
3、FastLane会自动在项目跟目录下的fastlane文件夹下创建actions文件夹,下面会生成app_hz.rb文件
4、app_hz.rb文件中已经给出了编写一个action,需要完成的模块,我们只需要在文件中指定的方法中填入相应的代码即可

module Fastlane
  module Actions
    module SharedValues
      APP_HZ_CUSTOM_VALUE = :APP_HZ_CUSTOM_VALUE
    end

    class AppHzAction < Action
      def self.run(params)
        # 可以获取命令传过来的参数
        UI.message "begining"
        command = []
        command << "curl -v "
        command << "-F authoremail=#{params[:authoremail]} " if params[:authoremail]
        command << "-F productkey=#{params[:productkey]} " if params[:productkey]
        command << "http://app.hz.netease.com/tasks/create"
        result = Actions.sh(command.join(' '))
        UI.message "end"
        return result

        # sh "shellcommand ./path"
    Actions.lane_context[SharedValues::APP_HZ_CUSTOM_VALUE] = result
      end

      def self.description
        "支持上传应用到内测分发平台"
      end

      def self.details
        # Optional:
        "支持通过命令行的方式上传应用到内测分发平台,用户可以通过二维码扫描下载"
      end

      def self.available_options
        # 传入参数的定位,是否必填,是否有默认值
        [
          FastlaneCore::ConfigItem.new(key: :authoremail,
                                       env_name: "FL_APP_HZ_AUTHOR_EMAIL", 
                                       description: "上传的用户邮箱", 
                                       verify_block: proc do |value|
                                          UI.user_error!("邮箱不能为空") unless (value and not value.empty?)
                                       end),
          FastlaneCore::ConfigItem.new(key: :app,
                                       env_name: "FL_APP_HZ_APP", 
                                       description: "应用地址", 
                                       verify_block: proc do |value|
                                          UI.user_error!("应用地址不能为空") unless (value and not value.empty?)
                                        
                                       end),
 
          FastlaneCore::ConfigItem.new(key: :typeversion,
                                       env_name: "FL_APP_HZ_TYPE_VERSION", 
                                       description: "应用版本类型", 
                                       default_value: "2"
                                       ),

        ]
      end

      def self.output
        # Define the shared values you are going to provide
        [
          ['APP_HZ_CUSTOM_VALUE', 'A description of what this value contains']
        ]
      end

      def self.return_value
        # If you method provides a return value, you can describe here what it does
      end

      def self.authors
        ["kevinkong/kevinkong"]
      end

      def self.is_supported?(platform)
        [:ios, :android].include?(platform)
      end
    end
  end
end


FastLane在iOS工程中的使用
1、执行xcode-select --install 安装xcode命令行工具
2、进入项目的跟目录执行fastlane init 和在Android中的操作是一致的
3、iOS官方提供的工具集合

  • gym 打包iOS应用
  • scan 执行工程中编写的单元测试和UI自动化测试
  • snapshot 自动在不同的设备上截图图片,需要自己编写UI自动化测试脚本
  • cert 自动创建和维护iOS签名证书
  • pilot 上传应用到TestFlight用户分发测试
  • deliver 发布应用到Appstore


FastLane与Jenkins的结合
1、Jenkins的节点机器安装上面的介绍安装相关的环境

2、按照上面的介绍配置完成Fastfile文件提交到代码仓库

3、Jenkins的Job中配置拉取代码

4、Jenkins的Job中在shell中执行fastlane action 命令即可

总结:在Jenkins中要使用FastLane的话流程也比较简单


总结:
1、FastLane开源、自定义Action灵活,当前覆盖了打包、签名、静态代码检测、测试、分发、文档、push、源码控制等不同模块的Action,这些Action封装了常见的命令行操作,可以提高开发的效率,当前总共有170+的Action,Action详情
2、FastLane方便开发人员配置一次后,后续在命令行下一句命令搞定整个流程
3、FastLane的整个流程需要第三方Web端服务的一些支持,比如分发使用了TestFlight服务


可以做的更好:
1、FastLane串联起来的整个流程确认一个统一的页面,查看每个模块的执行情况,当前的工具更加的方便开发人员使用,但是缺少管理者角度看到更多更全的数据


网易云新用户大礼包:https://www.163yun.com/gift

本文来自网易实践者社区,经作者孔庆云授权发布。