gpt4 book ai didi

chef-infra - 使用 Chef 服务器和 Vagrant 提供开发人员环境而无需注册节点

转载 作者:行者123 更新时间:2023-12-04 17:21:27 24 4
gpt4 key购买 nike

我希望创建一个基于 Web 的应用程序的开发人员环境,该环境将使用 vagrant 在 VM 上安装应用程序服务器和数据库服务器。我正在使用开源厨师服务器和 Vagrant chef_client供应商。但是,每次配置开发人员节点时,chef_client供应商在厨师服务器上创建一个客户端节点。这是不可取的,因为此设置将被许多开发人员使用。此类节点可能会多次创建和销毁。因此不需要在 Chef 服务器上维护此类节点的列表。
chef_solo是另一种选择,但它要求系统中存在食谱。我们也使用厨师服务器作为食谱的存储库。因此,开发人员不需要在他/她的系统中拥有特定的食谱。我也看过berkshelf,我可以在哪里配置chef_api厨师服务器的路径。但这也需要一个节点。以下是我的 Vagrant 文件:

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厨师服务器上的节点。否则这符合我的目的。欢迎使用厨师服务器提供开发人员环境的任何其他策略。

最佳答案

立即解决

屠夫插件

立即想到的答案是使用 vagrant butcher插入。这将自动删除您的开发人员客户端和 Chef 服务器上的节点条目。

长期解决方案

因为您知道 Berkshelf "chef_api" directive我将假设您有一个典型的企业场景,其中几个开发人员正在共享本地开发的食谱。

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

厨师食谱存储库模式

保留一个厨师服务器的实例作为食谱的存储库。每个已发布的食谱版本都推送到此处,并可供所有 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 上传”,我需要的所有食谱都会自动加载到我的开发厨师服务器中。

使用 Spiceweasel 加载厨师服务器

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

https://github.com/mattray/spiceweasel

开发:Chef Zero 和 Vagrant

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

以下是我经常安装的 vagrant 插件以支持厨师食谱开发:
  • Omnibus plugin :确保我正在运行指定版本的厨师客户端
  • Berkshelf plugin : 下载和管理我的食谱
  • Chef zero plugin :运行厨师服务器的本地副本

  • 一旦食谱准备好,它就会被提交和推送。然后 Jenkins 将选取新修订并自动将其加载到食谱存储库中。

    关于chef-infra - 使用 Chef 服务器和 Vagrant 提供开发人员环境而无需注册节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22280706/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com