自动构建和发布

软件系统最终要给用户使用前一定要进行最后一次构建和发布。对于构建,如果是静态语言开发的系统,它包含编译和打包等步骤;对于动态语言开发的系统,它通常只包含打包等步骤,一般没有编译。而对于发布,如果是Web系统,它主要是将构建好的系统文件部署到服务器上;对于移动应用,它主要是将构建好的应用文件上传到应用商店或者可以让用户下载的服务器上。

对于构建和发布,如果由开发或者维护人员等在自己的机器上由手动进行,那么如果这个特定的机器上的构建工具被注入了后门,或者操作人员在构建的时候故意在代码里面注入一些后门,或者部署,那么构建出来的软件就会存在安全漏洞。为了避免这种安全漏洞的出现,就需要通过一个严格的流程来建立一套CI流水线,其中包括审核开发工具(比如MD5码验证),对构建机器设置严格的权限访问控制等,从而避免在软件开发的最后一步中产生一些意想不到的安全漏洞。