我希望创建一个基于Web的应用程序的开发人员环境,该环境将使用vagrant在VM上安装应用程序服务器和数据库服务器。我正在使用开源厨师服务器和流氓chef_client
配置器。但是,每次配置开发人员节点时,chef_client
配置程序都会在chef服务器上创建客户端节点。这是不可取的,因为许多开发人员都会使用此设置。这样的节点可能会被多次创建和销毁。因此,不需要在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
我希望不在Chef服务器上创建sample_app
节点。否则这符合我的目的。欢迎使用厨师服务器提供开发者环境的任何其他策略。
答案 0 :(得分:10)
我想到的直接答案是使用vagrant butcher插件。这将自动删除Chef服务器上的开发人员客户端和节点条目。
由于您了解Berkshelf "chef_api" directive,我将假设您拥有典型的企业方案,其中有几位开发人员共享本地开发的烹饪书。
这就是我正在做的厨师......
保留chef服务器的实例作为cookbook的存储库。每个已发布的食谱版本都会推送到此处,供所有内部厨师用户使用。
要维护存储库烹饪书,请使用Jenkins为cookbook实施CI过程。 Jenkins的工作来自当地的GIT存储库,或来自社区食谱网站。这种方法的优点是可以使用chef spec自动化测试,并且可以使用foodcritic等工具实现QA规则。通过这种方式,构建失败有助于提高组织内使用的烹饪书的整体质量。
我认为这个存储库模式是我们在Berkshelf人最终推出Berkshelf 3.0时会更多的事情(参见berkshelf-api)。
Berkshelf用于控制将烹饪书加载到所有厨师服务器(dev或prod)。以下是演示“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
“metadata”语句告诉Berkshelf在cookbook的元数据文件中加载列为依赖项的cookbook。这很棒,简单的“berks upload”,我需要的所有食谱都会自动加载到我的开发厨师服务器中。
非常有用的工具。集成Berkshelf并生成所有其他刀具命令,用于从chef repository加载厨师服务器。
https://github.com/mattray/spiceweasel
一旦烹饪书受到控制(使用Berkshelf),我的建议是采用Chef zero。然后,每个开发人员都可以拥有自己的本地管理的Chef服务器实例。
以下是我经常安装的用于支持厨师食谱开发的流浪插件:
一旦烹饪书准备就绪,它就会被提交并推送。然后Jenkins将获取新版本并自动将其加载到cookbook存储库中。