Codemagic CICD 幫忙添加 Tag 到 Organization Repo
這篇寫於 2023 年。工具和 API 變化很快,部分步驟可能已經不適用。
現在有蠻多公司都會使用 Codemagic 這套服務來完成 APP CICD,尤其他們專為 Flutter 設計,在網頁的操作上非常簡單清楚,提供視覺化介面以及 yaml 編輯檔設置兩種方式。每個月 500 分鐘的使用額度也給得足夠,很多新創公司都會首選 Codemagic 來處理 CICD。
本文要說明如何在 CICD 過程中給予 Organization Repository 一個版本 Tag(如果你是將 Repo 放在個人帳戶裡實作上差不多),方便我們後續追蹤每個版本的程式碼,在 Testflight 與 Android Test 上也能有區別。
趕快跟著我來實作吧!
GitHub Organization 設定#
- 開啟 Personal access tokens → Setting
- 將 Fine-grained personal access tokens 設為 Allow access via fine-grained personal access tokens
- 儲存
GitHub 個人帳戶設定#
- 確定已經加入組織後,開啟 Developer Setting → Fine-grained personal access tokens。爲 Codemagic 創建新的 Token
- 可以自由給予名稱、到期時間、描述
- 最重要的兩點,我們將 Token 的使用限制於特定專案,並給予 Contents 的讀寫權限,因為要幫 Repo 設置 Tag
完成儲存後會得到一組金鑰,它只會出現這一次,需要將它記錄下來,避免遺失
// Example
github_pat_xxxxxxxxxxxxxxxx
Codemagic 設定#
將準備好的 Access Token 設定到 Environment variables,方便我們的 CICD Pipeline 存取。記得勾選 Secure,才不會暴露出來讓大家看到。需要設置三個環境變數,方便後面流程拿來使用,盡量避免寫死在程式碼和命令裡面
- GITHUB_REPOSITORY_URI
- GITHUB_ORGANIZATION_NAME
- GITHUB_ACCESS_TOKEN
接著打開 Distribution 前的設置,我們要針對 Pre-publish script 做一些改變,目的在部署出去前先更新 Git,將新的版本標籤推上去
根據官方範例,可以直接將這段拿過來使用。其中會先判斷前面的 Build 狀態是否為成功,失敗的話就不標記和部署了。
$BUILD_NUMBER為 Codemagic 內建變數,代表這個 Build 的新號碼,每次+1- 記得確保 GITHUB_REPOSITORY_URI、GITHUB_ORGANIZATION_NAME 和 GITHUB_ACCESS_TOKEN 三個變數的內容沒問題
也可以先在本地測試是否能成功 push 到 Github
完成#
執行 build 之後可以看到 Pre-publish script 環節,會有 Git 操作過程,這時候 Repo 就會有新的 tag 囉,方便我們後續追蹤版本。
Articles#
- Flutter Meetup #1 聚會有什麼?還有 Flutter 四月大小事!
- 提升開發效率的好物,Mason 讓你輕鬆撰寫自定義模板!
- 教你製作強大的 Rive 動畫,完成一隻 Flutter Dash,在 APP 跟它互動!
- Flutter 如何根據 Flavor 多環境載入對應的 Firebase Config
- Isolates 在 Flutter 3.7 & Dart 2.19 的升級,你該知道一下!
- 讓人驚艷的 Flutter Forward,釋出 Flutter 3.7 和 Dart 2.19
- 學會運用 Flutter Widgetbook,該管好自己和公司的元件庫了!
- 剛進入 Flutter 嗎?適合初學者食用,GetX 是否適合你呢!
- 你知道 Maestro 嗎,兼具人性的自動化測試框架,Flutter 品質就靠它了 — Part 1: 介紹與使用
- 教你為 Riverpod 2.0 撰寫 Flutter 測試 part.1
- 輕鬆了解 Isar NoSQL DB,用它來實作 Flutter 資料庫吧!
- Flutter 輕鬆實作 i18n,使用 easy_localization_generator 就對了
- Flutter CICD 使用 Gitlab Runner 和 App Center 實作 part.1
- 使用 CodeMagic 和 Firebase 實現 Flutter CICD
- 輕鬆完成Flutter開發環境,最新版!
- Easily understand StatefulWidget LifeCycle of Flutter
- “freezed” makes model class strong and easily
- 提高Flutter性能的小技巧!(一)
- What are Async and Isolates in Flutter?
- LoadBalancer is optimization for Isolates in Flutter
About#
- GitHub: chyiiiiiiiiiiii
- Instagram: flutterluvr.yii
- Linkedin: yiichenhi
- Youtube: Yii
- Youtube: 一起饅頭(美食頻道)
- Email: ab20803@gmail.com
Contribution#
如果覺得文章不錯的話可以贊助,讓我有更多動力和熱情分享學習紀錄和生活!請我喝一杯咖啡吧~
希望有幫助到你/妳,歡迎追蹤我,方便瀏覽最新的文章~
本文原刊登於 Medium。