Alan 发表于 2020-12-5 23:57:06

发布工程的基本思想(SRE谷歌)

发布工程师的日常工作是由下列4 个主要的工程与服务哲学指导的。
自服务模型为了应对大规模扩张,每个团队必须能够自给自足。发布工程师开发工具,制定最佳实践,以便让产品研发团队可以自己掌控和执行自己的发布流程。虽然我们有几千个工程师和几百个产品,Google仍然能够以很快的速度发布新产品。这是因为每一个团队都可以决定多久或者什么时候来发布产品的新版本。发布过程可以自动化到基本不需要工程师干预,很多项目都是利用我们的自动构建工具和部署工具自动构建、自动发布的。发布过程是真正的自动化的,工程师仅仅在发生问题时才会进行干预。

追求速度面向用户的软件组件(例如Google搜索服务的很多组件)重新构建非常频繁,因为我们的目标是让用户可见的功能越快上线越好。我们同时也认为频繁的发布可以使得每个版本之间的变更减少。这种方式使得测试和调试变得更简单。有些团队每小时构建一次,然后在所有可用的构建版本中选择某个版本进行发布。选择过程是基于测试结果与所包含的功能列表共同得出的。还有的团队采用一种"测试通过即发布"(Push On Green)的发布模型,也就是说,部署每个通过所有测试的版本(参见文献【Kle14】)。
密闭性构建工具必须确保一致性和可重复性。如果两个工程师试图在两台不同的机器上基于同一个源代码版本构建同一个产品,构建结果应该是相同的。准'我们的构建过程都是密闭的(hermetic),意味着它们不受构建机器上安装的第三方类库或者其他软件工具所影响。

构建过程使用指定版本的构建工具(编译器),同时使用指定版本的依赖库(第三方类库)。编译过程是自包含的,不依赖于编译环境之外的其他服务。

当修复某个运行在生产环境中的软件的Bug,而需要重新构建之前的一个发布版本时,一般来说是比较复杂的。Google按照之前的源代码版本,加入一些后来提交的改动来构建新的发布来解决这个问题,这种方式被称为摘樱桃(cherry picking)。构建工具自身也是放置在与被构建的程序同一个源代码仓库之中的。因此,如果要对上个月构建的某个项目进行cherry picking,仍然会用当时的编译器版本,而不会用到这个月新的编译器版本,这样可以保证编译器功能的一致性。
页: [1]
查看完整版本: 发布工程的基本思想(SRE谷歌)