我有一个基于Linux的networking基础架构,由15台虚拟机和50多种不同的服务组成。 由厨师完全控制。 大部分服务都是内部开发的。
基本上当前的部署过程由shell脚本触发。 构build系统(Python和shell脚本的混合)将服务打包为.deb文件,并将这些包放入回购站。 它在所有15个节点上运行apt-get update ,然后是因为标准Chef apt Cookbook每天仅运行apt-get一次,而且我们绝对不希望在每个chef-client唤醒中无条件地运行apt-get update 。 构build系统最终在所有15个节点上重新启动chef-client守护进程(因为拉厨师本质,我们需要这一步)。
目前的过程有一些缺陷,我们要解决。 首先,它是asynchronous的,因为部署脚本在重启之后不检查chef-client日志,所以我们甚至不知道部署是否成功。 它甚至不等Chef客户完成这个周期。 其次,我们绝对不希望强制所有节点上的chef-client重启,因为我们通常只部署less量的包。 第三,我不太清楚使用chef-client进行部署是否合法,可能我们从一开始就做错了。 请分享您的想法/经验。
我不认为你需要重新启动客户端 – “厨师 – 客户端 – 一次”必须是足够的。 另外,如果我是你,我将制作一个数据包,在这个数据包中需要部署的包需要进行标记,并且将apt-get运行在包的数据上。
就成功/失败报告而言,你想要的是一个厨师处理程序 ,将成功/失败报告回聚合的某个中心点。