发布工程(Release Engineering)是软件工程内部一个较新、发展较快的学科。简单来说,这个学科专注于构建和交付软件(参见文献【McN14a】)。发布工程师通常对源代码管理、编译器、构建配置语言、自动化构建工具、包管理器和安装器等非常了解(甚至是这方面的专家)。他们的技能横跨很多领域∶开发、配置管理、测试集成、系统管理,甚至用户支持。
为保障服务可靠运行需要可靠的发布流程。SRE需要保证二进制文件和配置文件是以一种可重现的、自动化的方式构建出来的。这样每一次发布才是可以重复的,而不是"独特的雪花"(俚语,意指没有两片雪花是完全相同的)。对发布流程的任何改变都应该是有意为之,而不是意外之举。SRE 关注从源代码到部署的整个流程。
发布工程是Google内部的一项具体工作。发布工程与产品研发部门的软件工程师(SWE),以及 SRE一起定义发布软件过程中的全部步骤——包括软件是如何存储于源代码仓库中的,构建时是如何执行编译的,如何测试、打包,最终进行部署的。
Google是一个数据驱动的公司,发布工程也不例外。我们有各种各样的工具提供各种各样的数据。例如,从代码修改提交到部署到生产环境一共需要多长时间(也就是发布速度),又比如统计构建配置文件中某个特性的使用率(参见文献【Ada15】)。大部分这些工具都是由发布工程师设计和开发的。
发布工程师利用这些工具定义一些最佳实践,来保障软件项目可以一致地、可重复地进行发布。我们的最佳实践覆盖整个发布过程中的所有元素。例如,编译器功能开关、编译结果中的版本编号的格式、构建过程中必须执行的步骤等。确保我们的工具在默认情况下就能正确工作,并且有合理的文档作为辅助,可以让开发团队专注于功能和用户,而不需要花费时间重新发明软件发布的轮子(经常还是不圆的轮子)。
Google有很多SRE负责产品更新的安全部署过程,保障这些服务可以正常运行。为了保障软件发布流程能够满足业务需求,发布工程师与SRE紧密协作,为变更的测试进行无缝发布,以及为变更的顺利回滚等制定策略。
|