6.2 源代码及其构建
下面介绍要考查哪些具体活动。这些活动有很多类型,如果直接列举出来,可能有疏漏,也不好记。我们对这些活动大概做一个分类。
先不考虑测试相关活动。假设开发人员写出了完美的源代码,无须测试,那么从写出源代码到发布上线要经过哪些活动呢?
源代码经过构建,形成了制品,然后把制品部署到生产环境中运行起来。这么看来,这是两步转换的过程。第一步,源代码经过构建,转换成了制品,比如容器镜像。第二步,制品经过部署,转换成了运行中的程序,比如运行中的容器。本节介绍为了完成第一步转换,需要考查哪些细分领域。
第一,源代码版本控制。尽管在软件交付过程中有大量的内容都应当被纳入版本控制中,但源代码无疑是最重要的,也是最需要作为整体管理的。比如将某个微服务的所有源代码放入一个代码库中,作为整体打上版本标签,作为整体拉出分支,作为整体检出(Checkout)到一个本地目录中,等等。对源代码被纳入版本控制中的考查,实质上就是在考查版本控制工具和服务的能力与使用方式——尽管版本控制工具和服务中可能不只存放了源代码。
除了源代码,还有不少类型的内容也应该被纳入版本控制中,但它们未必都被放入代码库。我们将在对应的活动中分别考查它们,比如在部署这个细分领域中考查部署脚本和/或部署过程的配置被纳入版本控制中的情况。
第二,构建。构建是指把源代码等原材料打包为安装包、容器镜像等制品,以供部署使用或进一步构建使用。这里所说的构建只是编译、链接、打包、生成容器镜像等转换活动,不包括单元测试等测试活动。对于测试活动,我们另行考查。
第三,构建环境管理。构建需要在一定的环境中进行。我们常说的环境是指软件部署运行所需要的运行环境,比如测试环境、生产环境。而这里所说的环境,是指构建所需要的环境。事实上,这个环境通常不仅用于构建,也用于代码静态扫描、单元测试等。我们把这个环境称为构建环境。在流水线上,在构建环境中进行构建、代码静态扫描、单元测试。开发人员的本地个人开发环境也是构建环境,尽管它不仅仅是构建环境。构建环境涉及如何创建环境并保证环境的标准化,如何保证随时都可以分配到合适的环境,等等。
第四,制品管理。构建所产生的安装包、容器镜像等制品需要妥善存放。这里我们关注的重点是供部署或进一步构建使用的制品,这类制品通常被存入制品库进行管理。对这类制品的管理也作为单独的一个细分领域来考查。这实质上也就考查了制品管理工具和服务的能力与使用方式——尽管制品管理工具和服务中可能不只存放了安装包及容器镜像。
此外,各种日志、报告等,比如构建日志、自动化测试报告等,虽然严格来说也是制品,但它们不一定要被放入制品库中,可能会由产生它们的工具或服务本身来管理。比如由构建服务来管理构建日志,由自动化测试服务来管理自动化测试报告。所以在构建、自动化测试等活动中会对这些内容分别进行考查,而不是在这里集中考查。