Chef infra 在Chef中,从包中部署单个网站的最佳方法

Chef infra 在Chef中,从包中部署单个网站的最佳方法,chef-infra,chef-recipe,knife,winrm,Chef Infra,Chef Recipe,Knife,Winrm,我有一个包,包括多个网站和窗口服务,我使用winrm从TeamCity远程自动部署它们 但我想找到一种最好的方法,定期部署一个网站(recipe),该网站的其余部分不会以某个角色运行以节省时间 你愿意分享你的想法吗 提前感谢。您可以通过--override runlist(-o)命令行选项直接运行单个配方(-ish)。但通常不建议这样做,因为Chef被设计成一个收敛的系统,这意味着它对所有事物的状态进行建模。更好的方法是在请求的包版本中使用node属性(或类似属性),并且仅在本地版本与请求的版本

我有一个包,包括多个网站和窗口服务,我使用winrm从TeamCity远程自动部署它们

但我想找到一种最好的方法,定期部署一个网站(recipe),该网站的其余部分不会以某个角色运行以节省时间

你愿意分享你的想法吗


提前感谢。

您可以通过
--override runlist
-o
)命令行选项直接运行单个配方(-ish)。但通常不建议这样做,因为Chef被设计成一个收敛的系统,这意味着它对所有事物的状态进行建模。更好的方法是在请求的包版本中使用node属性(或类似属性),并且仅在本地版本与请求的版本不匹配时安装。如果正确实现,这将提供幂等性和收敛性。

感谢@coderanger的回复。我听说chef client-o没有保留node.save,这可能不会保留状态。我听说的另一种方法是使用data bag to use if语句来提供打开或关闭部署的值,这是我所熟悉的。缺少node.save只是覆盖运行列表的众多footgun级别问题之一。当您了解所有的权衡时,它们可能非常有用,但现在可能要避开。关于构建应用程序部署方法的更一般性问题,请参阅我的Rails、Django和Express示例。