在我们的小型开发组织的范围内,我们正在尝试使多个服务的部署/更新尽可能自动化。这些服务主要位于Docker容器中(还有一些Vagrant框用于无法直接在Linux上运行的事物,例如macOS构建节点)。
我们依靠Docker文件和Compose文件(部署有docker stack
)来实现自动化的很大一部分:通过构建Dockerfile以可复制的方式安装各个VM,然后一起启动直接依赖的服务通过撰写文件。
然而,越来越明显的是,每个环境配置和基础架构部署的最终步骤还没有得到同样好的形式化。为了说明这一点,让我们想象一下我们的目标是在给定的环境中部署两个堆栈(Jenkins
和Artifactory
)。
当前,我们将为此目标部署创建一个私有存储库A
,以完成最后的步骤。该存储库将包含配置(包括机密信息)和一个单独的bash脚本,以在为每个堆栈提供相应配置的同时对其进行部署。如果堆栈已在运行,则通用的主脚本仅负责停止堆栈,然后按顺序执行各个脚本。
然后,要实际部署(或更新),可以将SSH SSH到目标环境中,克隆A
存储库,然后运行主脚本。
与优雅的容器化方法相比,这种方法感觉不足。我们的一些悲伤:
A-test
存储库。A
存储库中。答案可以采取几种形式,包括学习资源,关于如何从开发人员的角度解决这一最后步骤的一般建议,或者通常针对此问题推荐的推荐工具和软件。