我正在研究在使用 Chef 的同时跨多个主机部署我的应用程序(Web / DB / 应用程序层)的方法。我想出的是使用 Chef 配方将部署的每个步骤表示为一个单独的节点状态。例如,如果有一个处理停止 X 守护进程和监控的步骤,则可以将其编写为简单地期望特定 X 守护进程停止的厨师食谱。同样,将工件从共享位置移动到 Web 根目录的部署步骤也可以引用为代表节点特定状态的厨师配方(将工件从 A 点复制到 B 点)。
整个部署过程将包括基本上完成这三件事的各个步骤:
- 根据当前部署步骤修改节点的运行列表。
- 让 chef-client 在每个节点上运行
- 记录任何失败并允许在失败的节点上重复运行主厨或跳过该步骤,以便继续部署。
问题:
- 以这种方式使用 Chef(不断修改节点的运行列表以更改节点状态)是一种不好的做法吗?如果是这样,为什么?
- 协调这一切的最佳方式是什么?我可以在那里使用任何类型的 CI 工具,但是我无法弄清楚如何捕获 chef-client 的输出并能够重复或忽略在特定节点上运行的 chef-client。