运用自动化构建和发布管道(delivery pipelines)能为项目构建带来巨大便利,但是准备其构建代理(build agent)时却需要花费大量精力。
代理中经常可能包含同一工具的多个版本,比如,多个版本的JDK、.Net Framework或Node.js。最终,为了解决版本间的冲突,会需要准备大量代理用于分割各个工具集。维护这些代理也不是容易的工作。这些代理通常是手工定制的。当然,在没有扩展需求或遇到问题之前,它们还能勉强运行。
为了应对扩展的需求,就需要我们创建优质的虚拟机镜像用于组建代理。有时这些镜像是手动创建的,有时会使用到配置管理。无论如何,都会需要一系列工具用于创建、更新并发布镜像。最终我们才可以一键在镜像的基础上创建一个新的代理。
虚拟机使我们可以分割所使用到的工具集,但是在使用上这不够方便。也许将来会得到改进,但就目前看来,创建一个镜像至少需要两步:
退一步想,是否存在可以替代分割工具集的方法呢?其实我们真正需要的是虚拟机提供的隔离性。最近兴起的容器化提供了许多优秀的工具可供参考,比如Docker。这些工具不仅隔离了各环境,还简化了中间环节。
来源: