CI CD持续集成-CI

Fastlane介绍

2018-05-25  本文已影响347人  opwt

Fastlane是什么

Fastlane官网地址
fastlane类似js的任务流工具gulp的一个用于android/ios的任务流工具,使用ruby实现。
fastlane整合了一系列移动端开发中签名,编译,发布等工具,堪称打包神器。

image.png

fastlane不仅可以本地使用,还可以很好地和常用的部署工具集成。


image.png

安装

请参照官网

brew cask install fastlane

Fastlane怎么用

以IOS为例

1. 初始化fastlane

一个简单的demo

  1. 新建一个新的xcode工程
  2. 在工程目录下,运行fastlane init
  3. 选择4. Manual setup , 初始化后会在工程目录下生成fastlane的目录,里面有两个文件FastfileAppfile,Fastfile是整个任务流的配置文件,Appfile是app信息配置文件。

接下来我们将深入Fastfile,以配置我们的任务流。fastlane的运行机制是插件化,每个任务称为一个lane,可以理解为一个task,每个lane可以有多个action,action可以理解为插件。

目前官方开发的插件几乎覆盖了整个发布流程。
fastlane actions

当然,我们也可以很方便地定制自己的插件,真的非常简单。插件使用ruby编写,如果不会ruby,你甚至可以在ruby中调用shell(当然,ruby比shell方便多了)

2. 生成app

使用 fastlane produce 在ITunes Connect (简称itc)上生成一个新的APP
详细使用地址见:
https://docs.fastlane.tools/actions/produce/#produce

下面是一个简单的任务。

default_platform(:ios)
platform :ios do
  desc "下面就是一个个的任务,这里称之为lane"
  # 新创建一个app
  lane :new_app do
      produce(
        username: 'test@qq.com',
        app_identifier: 'com.compnay.TestProject',
        app_name: '测试工程',
        language: 'English',
        app_version: '1.0',
        sku: '123', # 注意,sdk必须大于2个字符
        #team_name: 'SunApps GmbH', # only necessary when in multiple teams

        # Optional
        # App services can be enabled during app creation
        enable_services: {
          #apple_pay: "on",               # Valid values: "on", "off"
          push_notification: "on",       # Valid values: "on", "off"
        }
      )
  end
end

运行 fastlane new_app 即可运行该任务。全命令行自动化,这样才能做到自动化打包发布。

3. 证书管理

在itc生成新的app后,就需要申请证书进行开发了。
Fastlane开发了Match工具进行管理。
Match使用git对证书进行管理。

image.png

团队成员无需要再相互传递证书文件。在fastlane中可以配置证书,自动进行匹配,下载,安装。让开发人员可以专心于业务开发,而无须关注环境细节。

match的使用方法:

  1. 新建一个git工程如 certificates,配置好远程仓库,如gitlab,github。
  2. 在工程目录下运行 fastlane match init,该命令会在工程目录下生成Matchfile配置文件,进行账号工程等配置。
  3. 使用 fastlane match appstore 生成证书。appstore是证书类型,可以在matchfile中配置,类型就是apple开发者网站的:development,adhoc,appstore这几种。生成后,证书会自动提交到git仓库进行管理。

一个简单的配置文件如下:

git_url("git@code.company.com:amazing_ios/certificates.git")
# The default type, can be: appstore, adhoc, enterprise or development
type("development")
username("test@qq.com")
app_identifier(["com.compnay.TestProject"])

有了配置文件,可以直接运行fastlane match即可。

Fastlane也可以管理多团队账号的证书,在certificates工程checkout一个新分支,再运行match命令即可。
其他成员机器上运行match时使用git_branch参数指定分支即可。

有个证书,接下来可以进行开发了。
papapa...享受了一阵美好时光,代码写好了。

编译

编译用的gym

image.png

xcode自带的xcodebuild的编译命令如下:

xcodebuild clean archive -archivePath build/MyApp \
                         -scheme MyApp
xcodebuild -exportArchive \
           -exportFormat ipa \
           -archivePath "build/MyApp.xcarchive" \
           -exportPath "build/MyApp.ipa" \
           -exportProvisioningProfile "ProvisioningProfileName"

稍显复杂。使用fastlane命令如下(官网上有很多别名,build_app/build_ios_app都是这个):

fastlane gym

gym可以很方便地配置参数,而且编译速度更快,再加上对错误有更友好的提示。
gym的参数也可以放到Gymfile文件中单独保存。

编译过程中非常容易遇到证书问题,确保bundle名字一致

编译完成后会生成ipa文件和dSYM文件。

Xcode编译项目后,我们会看到一个同名的 dSYM 文件,dSYM 文件是保存 16 进制函数地址映射信息的中转文件。如果Debug调试模式的话,我们可以根据log的输出轻松定位到导致crash的原因,但当应用 release 模式打包或上线后出现Crash,这个时候就需要通过出错的函数地址去查询 dSYM 文件中程序对应的函数名和文件名。

上传审核

最开始我们生成了一个APP,所以现在我们只需要上传APP的信息即可。
fastlane使用deliver工具进行上传。
deliver的详细介绍见:https://docs.fastlane.tools/actions/deliver/

可以理解为就是把itc后台的表单挪到的命令行,如app关键字,标题,权限,审核信息等,这样整个流程可以自动化完成。

信息可以单独写在文件,或者直接在命令行参数里面指定。
先执行fastlane deliver init初始化上传信息。
接下来,完善信息,执行fastlane deliver上传。

简单的demo如下:


更多的demo可以参见:
https://github.com/fastlane/examples

自动化流程

fastlane是把这些命令串起来,接下来,我们需要把整个开发流程串起来。简单的分工如下:


image.png

CI集成

todo

其他

设备管理

 lane :register_devices do
    register_devices(
        username: "xxx@qq.com",
        devices: {
           "Luka iPhone 6" => "1234567890123456789012345678901234567890"
        }
    )
end
# 加新设备后,同步证书
lane :sync_cert do
    match(
        type:"development",
        # 证书仓库地址
        git_url:"git@code.37ops.com:amazing_ios/certificates.git",
        # 分支以区别不同账号
        #git_branch: "fengzgu@sohu.com", 
        # appid
        username: "fengzgu@sohu.com",
        # 
        app_identifier:"com.2345.TestProject",
        # 设置只读权限,防止证书被修改
        readonly:true,
        # 如果有新设备,加上这个字段可以生成新的provisioning file
        force_for_new_devices: true, 
    )
end

Fastlane原理介绍

fastlane使用spaceship 与苹果进行交互,具体细节请看:
https://github.com/fastlane/fastlane/tree/master/spaceship#technical-details

上一篇 下一篇

猜你喜欢

热点阅读