截至 2015 年初,持续集成与功能分支的最新技术水平如何?

What is the state of the art of continuous integration vs feature branch as of early 2015?

我是持续集成领域的新手。

因为我想正确地练习 CI/CD 我尝试阅读有关最佳练习的内容,但这对我来说是一个难题。

不知哪位有经验的人可以告诉我,截至今天,关于以下事项的实践情况如何:

"Feature branch / branch by feature" 和 CI。

我的意思是我发现人们最挣扎的部分实际上是关于:

The practice of CI that requires frequent integration (in mainline) and the development practice that encourage feature driven development.

据我所知,在功能隔离和集成功能之间存在紧张关系,即使还没有完成。

所以我想知道,今天的情况如何。

我看到了抽象分支和功能切换之类的东西,还有其他我还不清楚但似乎依赖于工具来管理一些自动合并的解决方案,首先合并和测试分支,然后合并它回到主线。

听起来像 Teamcity 和 Bomboo 这样的工具支持它。詹金斯的理由不太清楚。

因此,如果有人能帮助规划出该特定问题的最新技术水平,我将不胜感激

强制披露:我是 Bitrise 的 CTO 和联合创始人,CI/CD 服务(主要)面向移动应用开发者。

我们通常建议(以及我们在内部应用程序开发中使用的做法)是测试每个代码推送,无论是哪个分支。始终尝试推送可以运行/通过单元测试的代码,当然 编写单元测试

在大多数 CI/CD 服务中,您可以定义将针对每次代码推送执行的通用测试构建和用于部署的单独构建 configuration/process。您应该有一个基础测试构建配置,它将测试每个代码推送,并且无论您在哪个分支上工作,您都应该尝试实现绿色构建。

一些 CI/CD 服务提供了拉取请求测试,但实际上并没有合并拉取请求,因此当您检查拉取请求时,您可以确定合并后测试仍然会通过。虽然这很复杂(即使您正在阅读拉取请求,主分支的状态也会发生变化)为此,我们的团队不依赖于这些测试,而是简单地进行合并,如果失败,我们会立即修复它。

对于这样的开发设置,您至少需要两个主要分支,并且始终在功能分支上工作。两个主要分支是:

  • 开发主分支:这是开发人员用来创建新功能分支的分支。在 gitflow 中,它通常被称为 develop.
  • 稳定/生产分支:该分支仅包含稳定的、经过测试的代码,合并来自开发主分支且仅当这是 green/passing 所有测试。在 gitflow 中这个分支被称为 master.

此分支策略适用于大多数 CI/CD 服务,并且是移动应用程序和 SaaS 服务的不错选择,您可以并且希望在这些服务中频繁发布(至少对于您的测试人员/暂存服务器)。