使用像 Chef 这样的工具与使用 makefile/shell 脚本进行部署相比有什么好处?

What are the benefits of using a tool like Chef vs. using a makefile/shell script for deployment?

我听说过有关 Chef 的好消息,在花时间学习新工具之前对它的所有好处感到好奇。不想把它变成意见线程,寻找它比 makefile/shell 脚本具有的附加功能列表。

Chef,还有Ansible/Puppet/Salt也是(统称为CAPS),都是基于"describe the desired state of the system and the tool will make it happen"的结构。

脚本或 Makefile 通常是一个过程系统,运行 这个,然后 运行 那个,等等。这意味着你需要从每一步到下一步都保持系统的心智模型,如果这与真实系统有偏差(例如,您尝试设置其所有者的目录不存在),您的脚本通常会中断。

有些东西很容易,比如 yum/apt-get install 因为它们在内部是幂等的,你每次都可以 运行 它们,如果包已经安装,它什么都不做。

CAPS 系统采用该原则(幂等性)并将其应用于所有管理任务。这在很大程度上减少了配置管理的脆弱性,因为您只需要告诉工具最终结果应该是什么样子,它就会负责从当前状态计算出增量。