iota app 的 持續交付 (Continuous Delivery)

持續交付 定義

(Continuous Delivery)

讓軟體產品的產出過程在一個短週期內完成

以保證軟體可以穩定、持續的保持在隨時可以釋出的狀況。它的目標在於讓軟體的建置、測試與釋出變得更快以及更頻繁。
這種方式可以
減少軟體開發的成本與時間,減少風險

持續交付 定義

(Continuous Delivery)

  • 定義:
    • 保證軟體可以 短周期、穩定、持續的在隨時可以釋出的狀態
  • 目的 & 優點:
    • 減少軟體開發的成本與時間,減少風險

持續交付 流程

(Continuous Delivery)

  • Develop
  • Build
  • Test
  • Deploy
  • Release
  • and Feedback!!!

iota app 遇到的問題

  • Repository & submodule 太多,容易出錯
    • 有 xmpp, view, mobile, desktop 四個 repository
    • 切錯一個 branch 或少 pull 一次 就等於 build 錯
  • Release 前才 build app,導致太晚才能發現錯誤
    • build 錯誤都等到 Release 前才發現,很難馬上修好
    • view 錯誤都等到 Release 前才發現,很難馬上修好
  • 每次都花很多時間在 MR 後的測試上
    • build app*4, 修改 ios 版號, 下載, download 到手機上
    • 因為太麻煩,所以基本上 MR 後不會 build 出來測試
  • 每次都花很多時間在 release 上
    • build app*4, 修改 ios 版號, 下載, release app*4

iota app 遇到的問題

  • Repository & submodule 太多,容易出錯
    • 有 xmpp, view, mobile, desktop 四個 repository
    • 切錯一個 branch 或少 pull 一次 就等於 build 錯
  • Release 前才 build app,導致太晚才能發現錯誤
    • 建置環境錯誤都等到 Release 前才發現,很難馬上修好
    • 程式錯誤都等到 Release 前才發現,很難馬上修好
  • 每次都花很多時間在 MR 後的測試上
    • build app*4, 修改 ios 版號, 下載, download 到手機上
    • 因為太麻煩,所以基本上 MR 後不會 build 出來測試
  • 每次都花很多時間在 release 上
    • build app*4, 修改 ios 版號, 下載, release app*4

iota app 遇到的問題

  • Repository & submodule 太多,容易出錯
    • 有 xmpp, view, mobile, desktop 四個 repository
    • 切錯一個 branch 或少 pull 一次 就等於 build 錯
  • Release 前才 build app,導致太晚才能發現錯誤
    • build 錯誤都等到 Release 前才發現,很難馬上修好
    • view 錯誤都等到 Release 前才發現,很難馬上修好
  • 每次都花很多時間在 MR 後的測試上
    • build app*4, 修改 ios 版號, 下載, download 到手機上
    • 因為太麻煩,所以基本上 MR 後不會 build 出來測試
  • 每次都花很多時間在 release 上
    • build app*4, 修改 ios 版號, 下載, release app*4

iota build app 很麻煩的解法

  • 測試版 Continuous Deployment
  • 正式版 Continuous Delivery

iota app 測試版 CD

  • 一個 MR,一個版本

im2

Build      Feedback     Deploy

iota app 測試版 CD

  • 一個 MR,一個版本

Build      Feedback     Deploy

im2

iota app 正式版 CD

  • 只在 Desktop / Mobile Merge 回 Master 時觸發

im

Test      Feedback      Release     Feedback

iota app CD 完整流程

im

im2

目前成效

  • 加入 Daily build 機制
    • 額外花時:無
  • 減少 Release 花費時間
    • 不再需要臨時 debug
    • 省去點 Jenkins、下載、上 Desktop、更版號 等時間
    • 只剩 android上架、ios上架、打 tag 要費時
  • 區分 artifactory 上的 正式版 & 測試版
    • 正式版:x.x.x
    • 測試版:x.x.x-test

TODOs

  • 完善 CI 機制
    • ESLint 搭配 GitLab CI
    • 銜接自動測試腳本
  • 自動打 tag
  • 自動升版 (x.x.x-test)
  • 自動加上 GitLab label

心得

很瑣碎、很容易忘記、很容易出錯的事情,

自動化就對了

References

iota app 的 持續交付 (Continuous Delivery)

By Chang Henry

iota app 的 持續交付 (Continuous Delivery)

  • 55