5

我希望创建一个基于 Web 的应用程序的开发人员环境,该环境将使用 vagrant 在 VM 上安装应用程序服务器和数据库服务器。我正在使用开源厨师服务器和带chef_client供应商的流浪者。但是,每次供应开发者节点时,chef_client供应者都会在厨师服务器上创建一个客户端节点。这是不可取的,因为许多开发人员将使用此设置。这样的节点可能会被创建和销毁多次。因此不需要在 Chef 服务器上维护此类节点的列表。

chef_solo是另一种选择,但它要求系统中存在说明书。我们也使用厨师服务器作为食谱的存储库。因此,开发人员不需要在他/她的系统中有特定的说明书。我也查看了 berkshelf,我可以在其中配置chef_api厨师服务器的路径。但这也需要一个节点。以下是我的流浪文件:

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "precise64-chef"
  config.vm.network :private_network, ip: "33.33.33.10"
  config.omnibus.chef_version = '11.8.2'
  config.vm.provision "chef_client" do |chef|
    chef.log_level = :debug
    chef.environment = "development"
    chef.delete_node = true
    chef.delete_client = true
    chef.node_name = "sample_app"
    chef.chef_server_url = "https://chef-server-url"
    chef.validation_key_path = "chef-validator.pem"
    chef.add_role "base"
    chef.add_role "pg_client"
    chef.add_role "application_server"
    chef.add_role "db_server"
    chef.add_recipe "deploy_application"
  end
end

我希望不在sample_app厨师服务器上创建节点。否则这符合我的目的。欢迎使用 Chef 服务器提供开发人员环境的任何其他策略。

4

1 回答 1

10

立即解决

屠夫插件

立即想到的答案是使用vagrant butcher插件。这将自动删除厨师服务器上的开发者客户端和节点条目。

长期解决方案

由于您知道 Berkshelf “chef_api” 指令,我将假设您有典型的企业场景,其中几个开发人员共享本地开发的说明书。

这就是我正在和厨师一起做的事情......

厨师食谱存储库模式

保留厨师服务器的实例作为食谱的存储库。每个发布的食谱版本都会推送到这里,供 Chef 的所有内部用户使用。

要维护存储库说明书,请使用 Jenkins 为说明书实施 CI 流程。Jenkins 作业来自本地 GIT 存储库或社区食谱网站。这种方法的优点是可以使用chef spec自动化测试,并且可以使用foodcritic等工具实施 QA 规则。通过这种方式,构建失败有助于提高组织内使用的说明书的整体质量。

我认为当 Berkshelf 人员最终推出Berkshelf 3.0(另请参阅berkshelf-api)时,我们将更多地使用这种存储库模式。

使用 Berkshelf 加载食谱

Berkshelf 用于控制将食谱加载到所有厨师服务器(开发或产品)中。以下是一个演示“Berksfile”:

chef_api "https://cookbook.repo.myorg.com/", node_name: "dev1", client_key: "/path/to/dev1/private/key/key.pem"

cookbook "apache2"
cookbook "mysql"
...

“chef_api”指令告诉 berkshelf 从本地厨师食谱存储库加载所有食谱,而不是默认从社区存储库加载。

这使得创建主厨师服务器的“类似生产”的副本变得微不足道。它还启用了 berkshelf 更神奇的方面之一。系统中的每本说明书都可以有自己的简单 Berksfile:

chef_api "https://cookbook.repo.myorg.com/".....

metadata

“元数据”语句告诉 Berkshelf 加载食谱的元数据文件中列为依赖项的食谱。这太棒了,一个简单的“berks upload”和我需要的所有食谱都会自动加载到我的开发厨师服务器中。

使用 Spiceweasel 加载厨师服务器

非常有用的工具。集成 Berkshelf 并生成所有其他用于从厨师存储库加载厨师服务器的刀命令。

https://github.com/mattray/spiceweasel

开发:Chef Zero 和 Vagrant

一旦食谱得到控制(使用 Berkshelf),我的建议是采用Chef zero。然后,每个开发人员都可以拥有自己的本地管理的厨师服务器实例。

以下是我为支持厨师食谱开发而经常安装的 vagrant 插件:

一旦食谱准备就绪,它就会被提交并推送。然后 Jenkins 将选择新的修订版本并自动将其加载到食谱存储库中。

于 2014-03-09T14:53:16.727 回答