一个有效且组织良好的现代软件项目没有持续集成和持续交付/部署很难想象。很难想象没有某种形式的版本控制系统(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的技巧。所以,请牢记全部这些,在进行项目以前,您应该始终花一些时间来设计可以反映产品和团队需求的工做流程。