建構 Fastlane CD

Some tips and tricks for setting up Fastlane

JoseeWoo
電腦妻日常

--

What will you do after committing your code

Rock Me 專案改版至今,需要一直不斷的發佈測試版給內部人員測試用為了方便後續整合,iOS team決定建置fastlane節省時間成本。

在前公司曾經導入fastlane 也曾經導過fastlane swift 版,這次在Rock Me 裡面還是導入ROR版的fastlane,因為不確定fastlane swift是否符合Rock Me 的發板需求,已彈性和功能來說還是ROR版本的較為穩定也比較多彈性。

Fastlane 好處在於

  1. 自動化包版、上傳流程
  2. 多個App同時打包
  3. 自動更換版號
  4. 節省手動等待的時間

直接在專案目錄下面在Terminal裡輸入

fastlane init

會生成一個fastlane 的子目錄,裡面包含最基本Fastfile 和 Appfile,其餘檔案則是紀錄檔。

Fastfile是定義包板流程的主要檔案,Appfile則是可以定義你的App參數,包含App identifier, team id等等。

Tips for writing Fastfile

今天主要是紀錄一下在寫客製化化Fastfile遇到的問題,正規包版的流程應該是

但因為我們專案流程還未確定,因此都會少掉切回master包版的步驟,但正確來說都應該切回master再包版喔!

首先,我會先定義一個叫release的lane,lane是一個外部可以呼叫的function

也可以將lane定義成private,禁止外部呼叫。

呼叫lane的方式就是在Terminal 輸入

fastlane your lane name

接下來,就是定義細部release這個lane裡面的流程

Step 1: 給定所需要的環境變數,如果是外部來,可以用function 給入參數,也可以用Tips 1 讓user 輸入

Tips 1 — user interaction, 讓user 輸入所需要的訊息,例如帳號

Step 2:更改版號、build 號

Tips 2–在Fastfile 裡執行shell script 指令

可以寫

sh('your command')

或者

sh "your command.sh or command"

Step 3: 包ipa檔案

Tips 3 — global 環境變數

可以看到上面有許多 ENV['xxxxx'] 等的global參數,這些都是在Fastfile一開始時候定義,定義完也可以改變。像我們就會定義正式版和測試版的target name、bundle id,之後如果一個不小心需要變更,不必在整隻file裡面反覆找尋和更改

Step 4:上傳至appstore/ Testfligt

Step 5: slack notification

Tips 4— 讀取local file 的內容,並且送到slack web hook 中

這是我想嘗試的一個功能,因為每次在送出一個新版本,我們都必須整理一個文件列舉這次修改、新增的功能讓QA驗測。ios team 會把新增的功能列舉在README.md裡面,但我在想,是不是可以發版完就在slack通知中顯示更新的README.md內容,QA接到通知後,可以直接在slack 上面看到新增的大綱,也不需要再來詢問工程師了。

果然,是可行的,如上gist所示,fastlane有內建的slack呼叫指令,我們可以去定義是成功或是失敗,並且增加slack通知的欄位,所要做的就是讀出README.md的內容,並將他塞進slack通知裡。

我用一個變數存取讀出來的內容

data = File.read("../README.md")

並將內容轉成string 的格式

buildMsg = data.to_s

接下來塞進slack裡就ok

結果如下圖

--

--

JoseeWoo
電腦妻日常

iOS developer @VestiaireCollective. A dreamer needs a lot of alcohol, a drunker has too many dreams.