使用 Azure Pipelines 進行 iOS App 自動發布
如果 iOS App 要發佈到測試平台提供測試人員下載,開發者必須使用 Xcode 進行 Build , Archive , Export , Upload iPA 到測試平台上,為了減少一連串人工操作,本文使用 Azure Pipelines 實作 iOS App 的自動化發布。
▪︎ 使用情境
- 當 commit 新內容到 Bitbucket 後,觸發 Azure Pipelines 執行編譯與打包後,上傳到 Visual Studio App Center 並發送 Slack通知,測試者再經由 AppCenter 平台下載測試 App。
▪︎ 使用工具
- Bitbucket : 專案原始碼
- Azure DevOps Pipelines : 執行 Build , Archive , Export
- Visual Studio App Center : 發布 Ad-Hoc 或TestFlight
- Slack : Pipelines 的進度通知
▪︎ Visual Studio App Center 設定
需要先建立一個 Project 給 Pipelines 上傳 App 用
1. 建立 Token 給 Pipelines 上傳 iPA 檔案用
- Account Setting > API Tokens > New Token API。
- 建立之後 Token 只會顯示一次,要好好存起來。
2. 取得Group ID ,讓 Pipelines 上傳後指定測試群組
a. AppCenter > Project > Distribute > Group > New Group
b. Group > 右上角板手 Group Setting > Group ID
▪︎ Azure Pipelines 設定
1. 建立 Service Connection
- Pipelines 對於外部服務的連接設定
- 設定路徑:Project Setting > Pipelines > Service Connections > New Services
App Center
- 自定義 Connection 名稱 ,給設定檔使用
- Token 填入 App Center 產生的 Token
Bitbucket
- 與 Bitbucket 驗證連接,使Pipelines 可以存取 Repo
2. 創建 Pipelines
a. 在 Pipelines > New Pipelines > 選擇Code 來源,這邊使用 YAML 設定檔方式
b. 選擇專案 Repo
c. 建立設定檔,或是選擇已存在的YAML檔案,內容之後也都可以修改
d. 這邊會建立一組預設的Xcode Task任務,選擇 Save and Run會出現 Commit 編輯訊息,由於預設設定檔為trigger master,送出後會執行一次 Pipelines 任務,並在專案 Repo 根目錄建立 azure-pipelines.yml
設定檔
若不要執行 Pipelines 任務,可以在 commit 加上 [skip-ci]
3. Code Signing
上傳檔案 .p12(Private Key + Certificate) 與 Provisioning Profile
- Pipelines > Library > Source Files
- 檔案名稱可以自由命名
4. 建立環境變數
為了讓yaml檔讀取p12的密碼,在環境變數中設定
a. 前往已建立 Pipelines > Edit
b. 選擇 Variables
c. 建立新的變數名稱與 Value
假設上傳的
p12
檔案密碼是1234
,在此範例p12pwd
=1234
所以在yaml設定檔中使用 .p12 密碼的變數為 $(p12pwd)
▪︎ YAML 設定檔
- 每個 Pipelines 所進行任務項目,都是根據根目錄的
azure-pipeline.yaml
設定檔
使用範例
這個設定檔可分成幾個部分來看
- trigger : 監聽的Repo Branch
- pool : 編譯的系統環境
- InstallAppleCertificate@2:載入開發憑證
- InstallAppleProvisioningProfile@1 : 載入描述檔
- Xcode@5 : 編譯Xcode專案
- AppCenterDistribute@3:發佈到App Center
設定檔任務階層概念
- 設定檔任務中的層級是 Stage > Job > Step > Task
- 範例:
- 使用線上編輯就可以看到格式錯誤提示。
- 每一個 Job 執行結束後會清除產生的檔案
▪︎ Slack 通知設定
- 安裝 Azure Pipelines 到 Slack
- 把 @azpipelines 加入到 channel 中
- 在對話視窗輸入
/azpipelines subscribe [pipeline url]
註冊 pipelines - 詳細使用可參考 Azure Pipelines with Slack
▪︎ 測試者下載
- 發布完成之後可以在 AppCenter >Project>Distribute > Releases 中看見從 Pipelines 上傳的 iPA 檔案
- 隸屬於 AzureGroup 的測試人員,就可以從 email 收到更新連結導到下載頁面,需要登入App Center。
- 由於是ad-hoc方式,測試者手機需要先註冊 UUID 到 provisioning profile
▪︎ 完成
Pipelines 設定完成之後,當 branch 有新的 commit 就會自動部署 iOS App ,不用在 Xcode 進行操作,如有多個專案需要進行部署時,就可省下許多人工。azure-pipelines.yml
設定檔可以組合多種 task 使用,需要其他功能可以再參考官方文件。