一個有效且組織良好的現代軟件項目沒有持續集成和持續交付/部署很難想象。很難想象沒有某種形式的版本控制系統(VCS)的任何項目,其中最流行的是Git。android
在本文中,我將討論這些因素如何相互影響,經歷設計它們的設置的思考過程,並指出一些特定於Android的優化。git
讓咱們回顧一下咱們須要CI / CD的主要內容:github
可是,等等,咱們能夠手動完成全部操做,那麼使用它的真正緣由是什麼?緣由是咱們能夠指定自動執行這些操做的條件。緩存
這給咱們帶來了巨大的好處:ide
聽起來不錯吧?可是,讓咱們回想一下使用CI/CD的緣由。我提到了兩個主要詞:「條件」和「自動」。猜猜,誰負責第一個?這是您的VCS!或更確切地說,它的工做流程。gitlab
您的VCS模型定義了能夠設置運行各類自動化任務的條件。固然,這也取決於所選CI解決方案的功能集。可是它們傾向於提供類似的功能,只是形式不一樣。post
這是設計開發工做流程時必須問本身的問題:學習
牢記全部這些,並瞭解您的工做流程設計的重要性,讓咱們來看看使用最受歡迎的VCS-Git時的選擇。測試
在這裏,咱們僅討論各類分支模型以及它們如何與CI/CD一塊兒使用。關於合併vs變基vs squanch壁球的討論不在本文討論範圍以內,由於這並不會真正影響CI功能。優化
Gitflow是一種很是流行的工做流程,它定義瞭如下類型的分支:
此工做流程的基本CI/CD設置以下所示:
Gitflow是一個實體模型,儘管不是最簡單的模型。學習它須要花費時間,而且因爲須要進行大量操做,所以須要花費時間將代碼庫從一種狀態轉移到另外一種狀態。
隨着GitHub的興起,他們共享了本身的工做流程。它只是簡單地說:「爲每一個新功能從master建立一個新分支,而後合併回去」。這樣,根據您爲部署作準備的方式,修補程序將成爲另外一個功能分支,而develop分支將被忽略,發行版可能不存在,或者也不是功能。
該模型可能不像之前的模型那麼複雜,可是卻帶來了一個殺手級功能- 簡單性。
GitHub Flow具備較大優點的另外一個地方是開源軟件。使用Gitflow的開放源代碼項目有兩個錯誤的選擇-默認狀況下,向訪客和貢獻者顯示不多更新的master分支或非生產質量的development分支。
此工做流程的基本CI / CD設置以下所示:
GitHub Flow出現不久後,彷佛開始出現了每個VCS值得尊敬的Web服務都應該有一個以它命名的工做流。所以,GitLab Flow誕生了。
它創建在GitHub Flow的基礎上,旨在解決更復雜的部署邏輯的需求,而不是每次將代碼合併到master分支時都這樣作。
這些要求能夠是:
因爲某些外部條件(應用程序評論(App Store),部署窗口),沒法隨意部署。
一次支持多個應用程序版本。
此工做流程的基本CI / CD設置以下所示:
不要懼怕提出本身的定製工做流程!若是您以爲除了在線上找到的任何其餘模型之外,還須要其餘東西,請繼續修改現有模型或從頭開始建立新模型。互聯網上沒有人比您更瞭解您團隊和項目的要求!
在爲應用程序(尤爲是Android應用程序)建立工做流時,請仔細考慮一下。
一個不錯的起點是咱們以前探討的Git模型之一。
一般,在如下狀況下,GitHub Flow多是更好的選擇:
在如下狀況下考慮使用GitLab Flow:
最後,在如下狀況下考慮Gitflow:
咱們始終但願儘量減小CI構建的執行時間,以快速查看反饋並向前發展。有時,這樣作的緣由也是構建時間限制。例如,若是您使用的是免費套餐。並且因爲Android版本可能會花費大量的時間,所以這個問題變得更加嚴重。
有幾種方法能夠減小構建時間:
如今來看具體的優化示例:
assembleRelease
和assembleDebug
代替bundleRelease
和bundleDebug
。您會節省一些時間,由於生成APK的速度比捆綁包快。讓咱們概述一下咱們學到的要點。
VCS和CI/CD是現代開發過程的組成部分。咱們已經討論了它們爲何以及如何相互影響,使用它們須要瞭解的基礎知識,以及一些須要記住的特定於Android的技巧。所以,請牢記全部這些,在進行項目以前,您應該始終花一些時間來設計可以反映產品和團隊需求的工做流程。