首先,我的建议是不要直接从 Git 的 master 分支使用任何人的食谱。如果食谱存储库的各个作者/维护者 - 个人或整体 - 每个“版本”都有 Git 标签,请使用它。否则,请使用您知道适用于您的基础架构的特定提交。虽然 GitHub 是一个用于共享代码的有用站点,但重要的是要记住这些是开发存储库。相比之下,大多数人不会在他们的应用程序中使用库核心的主分支,他们会使用该库的发布版本(无论是 gem、cpan 模块、包等)。
其次,Opscode 的食谱已经发布了经过测试的版本,以确保它们按照自述文件所说的那样做。这些版本发布到Chef 社区站点。虽然他们在 GitHub 上有存储库,但我们建议使用该站点的版本。
要将手册从站点获取到您的本地系统,有多种工具可以支持本地开发工作流程。在内部,Opscode 正在使用Berkshelf,社区中的许多人也是如此。这是一个相当完整的工作流管理工具,包括类似于RubyGems Bundler的依赖解析器。Berkshelf 还与 Vagrant 集成,这意味着您的“berksfile”中的所有食谱都将复制到 Vagrant 机器以在 Chef 运行中使用。
chef-repo 顶层中的示例 Berksfile 如下所示;
site :opscode
cookbook "nginx"
cookbook "mysql"
cookbook "my_application", :git => "https://git.example.com/cookbooks/my_application.git"
然后使用berks install
下载食谱。Berkshelf 也将使用说明书中的元数据来解决它们的依赖关系。这将使用社区站点 API 下载 nginx 和 mysql 说明书,然后从内部 Git 存储库中检索“my_application”说明书。然后,要在 vagrant 中使用 berkshelf,请将其放在 vagrantfile 的顶部;
require 'berkshelf/vagrant'
然后,当您“流浪”时,如果您使用 Chef Solo,berkshelf 会将所有食谱复制到 Vagrant 机器中。如果您使用的是 Chef 客户端/服务器,那么您使用berks upload
将所有食谱上传到服务器,并且 vagrant 中的客户端配置器将从服务器下载。
Riot Games Berkshelf 的主要开发人员之一 Jamie Winsor 撰写了一份详尽的指南。
Berkshelf 的替代工具是Librarian Chef。它纯粹是一个依赖管理工具,而不是工作流工具。它“接管”你的cookbooks
目录,管理那里的所有内容,你的定制食谱进入site-cookbooks
. 然后,您可以像往常一样将 Vagrant 与单独的配置器一起使用,或者将客户端/服务器与knife cookbook upload
.
最后,knife
由于它与 Chef Client 一起提供,RubyGem 有一个插件,cookbook site install
. 虽然这由 Opscode 作为 Chef gem 的一部分提供支持和维护,但许多人正在将他们的工作流程转移到使用 Berkshelf 或 Librarian。Chef 文档有关于这个插件的更多信息。
如果您还有其他问题,#chef irc 频道或Chef 邮件列表是提问和讨论工作流程的好地方。