因此,经过广泛的研发后,我确定我的选择选择了一个。这是选项,最终是我选择的选项。
- 厨师申请
- 这是 chef v11 中引入的方便实用程序,可让您快速运行食谱。主要用于测试。
- 不足之处在于,要真正使配方可重用,您需要有某种或其他的论据。该实用程序似乎不支持这一点。
- 当我使用刀独奏时,我为本地管理的每个“节点”(以及在 git 存储库中)都有一个 json 文件。对于那些不熟悉的人..knife-solo 使用与您正在连接和设置的主机(节点)的名称匹配的 json 文件。我可以为我的主机名管理一些别名,而不是选择一个仅部署站点的 json 文件,而无需其他任何东西。
- 这需要设置仅用于部署站点的配方。根据您设置食谱和食谱的方式,您可能已经将站点部署逻辑与其自己的食谱隔离。如果没有,您可以重构这样做。
- 这将需要广泛使用 ssh配置文件。而且真的不是很灵活或直观。如果您预计您可能不是唯一使用此设置的人,则尤其值得关注。
- 这个太复杂了。
- 超越刀单的领域,可以直接在服务器上运行chef-solo。这仍然需要一个 JSON 文件来指定参数/参数,以及要运行的配方。
- 在服务器上运行是一种只运行deploy.json文件
chef-solo -c solo.rb -p deploy.json
中定义的 Chef 服务器设置过程的子集的快速方法。
把它们放在一起
使用 vanilla chef-solo可执行文件的最大问题是必须通过 JSON 文件指定参数(有关如何在 CLI 上指定 JSON 内联的讨论,但似乎不起作用,至少可靠)。
简单地说,应该有一个包含所有服务器设置的标准服务器设置 JSON 文件(如果需要,由刀独奏管理)。然后主机上的每个站点都有一个小的 json 文件
,它只部署那个站点。
我所做的是使用主厨服务器设置配置来创建每个站点所需的 json 文件。我的主厨进程已经知道服务器上的每个站点,因为它需要部署站点代码、设置数据库和配置 apache 等。因此,除此之外,它还会创建一个指示运行的 json 文件列表和一些其他属性,指示要部署的站点。
我使用 .erb 文件来创建站点部署 json 文件。例如:
{
"custom_cookbook": {
"deployroot": "<%= @deployroot %>",
<% if @git_revision -%>
"git_revision": "<%= @git_revision %>",
<% end -%>
<% if @settings_file -%>
"settings-file": "<%= @settings_file %>",
<% end -%>
"git_repository_url": "<%= @git_repository_url %>"
},
"run_list": [
"recipe[custom_cookbook::deploy]"
]
}
一旦这些 json 文件就位,使用 chef 部署站点只需运行上面指定的 chef-solo 命令,并使用 -j 参数指定由 master/primary chef 进程创建的自定义站点特定 json 文件。
我们通过Jenkins启动部署(有关我如何使用 jenkins 的更多信息),尽管这可以使用任何通过 SSH 访问该站点的东西来完成。
希望这可以帮助。