0

我们使用 Chef (Chef-Solo) 创建我们的托管站点节点,这非常棒。

我们使用knife solo 将我们的节点作为JSON 文件进行跟踪。我们的节点配置(json 文件)本身被检入到 git 存储库中。我们的节点设置文件和服务器(节点)本身之间存在一对一的关系。

一些节点为一个客户端托管多个站点,最好有一个轻量级的解决方案来为其中一个站点运行 chef 进程的部署部分,而不是运行整个 Chef 节点设置过程。

我意识到这可能是以一种不打算使用的方式使用 chef。我得到了 Chef 的“拉”方法,它是幂等的,它是如何用于配置管理的,以及这种类型的事情如何超出了人们通常会做的范围。简而言之...我想利用 Chef部署资源来部署站点,但不将所有站点部署在特定服务器上。

此外,我熟悉 Capistrano 以及它如何或多或少地完成我想做的事情......如果我能提供帮助,我根本不想在我们的 DevOps 工作流程中引入另一个框架。看起来似乎 Chef 的部署方式与 Capistrano 非常相似,我希望有一种方法可以像这样利用 Chef。

谢谢

4

3 回答 3

0

您可以使用多种厨师食谱——一个客户站点的一本食谱。并在本食谱中部署站点。

于 2014-01-07T16:54:40.323 回答
0

我唯一的想法是厨师申请

于 2014-01-06T22:14:31.660 回答
0

因此,经过广泛的研发后,我确定我的选择选择了一个。这是选项,最终是我选择的选项。

  • 厨师申请
    • 这是 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 访问该站点的东西来完成。

希望这可以帮助。

于 2014-01-08T15:15:49.960 回答