Bootstrap

jenkins + fastlane 持续化集成交付、OTA分发

jenkins

项目中测试组专用服务器上安装jenkins方便持续集成和交付。
jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台。安装流程请戳

fastlane

简单来说,以iOS应用发布流程为例,整个流程的各部分工作fastlane都能帮你完成。

主要突出的几个组件:

  • sigh:生成并下载开发者证书
  • produce:在iTunes Connector上创建你的应用
  • gym:打包你的应用
  • snapshot:实现应用截屏并取得图片
  • pilot:将你的应用发布到TestFlight进行测试
  • deliver:将你的应用的二进制代码,截屏和原数据等信息上传到AppStore

环境

安装fastlane

[sudo] gem install fastlane

命令行位置定位到目标Xcode项目根目录,然后执行如下

fastlane init

然后会有一些选项和输入项(AppId账号密码),按需输入即可,会进行一些相关的初始化
完成后项目根目录会生成一个fastlane文件夹,其中至少含有Appfile,Fastfile两个关键文件:

Appfile:记录你的项目,账号等关键信息,如包名,Apple ID,Team ID等;
Fastfile:关键的操作文件。根据你自己的需求,在其中定制自己的操作流;

Fastfile结构

default_platform(:ios)
platform :ios do
  desc "Push a new build to TestFlight"
  lane :package do
    build_app(scheme: "FastlaneApp")
    upload_to_testflight
  end
end

fastlane的主要使用就是需要根据自己的需求定制自己的lane,lane里面加入各种各样的action即可。
Fastfile编写完毕后,使用fastlane + [lane名称]即可执行
使用终端定位到项目根目录,执行如下

fastlane [lane名称],如:
fastlane package

在jenkins中配置fastlane命令
image.png

APP打包命令

使用xcodebuild命令打包ipa

sh "xcodebuild -exportArchive -archivePath #{archive_path}.xcarchive -exportPath #{archive_path} -exportOptionsPlist #{plist_path}"

使用gradle命令打包apk

gradle(
    task: "assemble",
    build_type: "Release",
    print_command: false,
    properties: {
      "tinkerEnable" => false,
      "android.injected.signing.store.file" => "#{real_store_file}",
      "android.injected.signing.store.password" => "#{store_password}",
      "android.injected.signing.key.alias" => "#{key_alias}",
      "android.injected.signing.key.password" => "#{key_password}",
    }
  )

OTA分发

上传到fir.im

fir命令行安装

[sudo] gem install fir-cli
sh "fir publish #{file_path} -T #{token} -c \"#{title}"

上传到蒲公英

sh "curl -F \"file=@#{file_path}\" -F \"uKey=#{pgyerUKey}\" -F \"_api_key=#{pgyerApiKey}\" -F \"updateDescription=#{title}#" -F \"publishRange=2\" http://www.pgyer.com/apiv1/app/upload"

上传到testflight

upload_to_testflight

参考文档:
Fastlane官方网页
Actions详细列解

;