我正在学习厨师,但在组织一切以与我的团队合作时遇到了问题。
首先,您似乎应该创建一个chef-repo 文件夹,您将在其中存储和修改用于管理节点的食谱。
我从事各种项目,每个项目都已经在 git 源代码控制之下。理想情况下,我会在我的每个项目中保留一个带有该项目食谱的chef-repo文件夹,对吗?
但是,在chef-repo 文件夹中,我必须添加一个包含我的刀配置和密钥验证的配置文件夹(.chef),这些是我特有的。将 .chef 文件夹添加到 gitignore 文件是否正常?
我知道食谱会上传到厨师服务器然后进行部署。其他团队如何在不重复大量工作的情况下将登台与生产环境分开?我们有一个 master 分支是我们的生产分支,一个 dev 分支是我们的临时分支(接收不到网站请求的 5%)和功能分支。大多数情况下,稳定时的 dev 分支会合并到 master 分支。我们如何分别上传食谱以便能够以单独的方式拥有两个环境?
谢谢您的帮助!
Mac*_*cki 15
我处理多个项目,所以 cjc 的解决方案对我不起作用。还有一个常见配置与自定义配置的问题(地址等对公司来说是常见的,配置中也有一些神奇之处)。我最终确定的方案有点像黑客,但它是一个方便使用的方案。
~/.chef
我没有使用global ,而是使用 Chef-repo 中的“.chef”子目录,该子目录未存储在 git 中(已添加到.gitignore
)。我还有文件config/knife.rb
文件,该文件已签入 Git 并包含共享配置。它从这个片段开始:
root_dir = File.join(File.dirname(__FILE__), '..')
%w(knife-secrets.rb knife-local.rb).each do |conf_name|
conf = File.join(root_dir, ".chef", conf_name)
Kernel::load(conf) if File.exists? conf
end
Run Code Online (Sandbox Code Playgroud)
这将加载.chef/knife-local.rb
包含自定义配置的文件(在基本版本中它只是OPSCODE_USER='username'
稍后使用的常量,但它可以包含任何刀配置),并且.chef/knife-secrets.rb
包含共享秘密(AWS 密钥等)。
在此之下,有使用这些文件中定义的常量的常规 Knife 配置,例如:
client_key "#{root_dir}/.chef/#{OPSCODE_USER}.pem"
Run Code Online (Sandbox Code Playgroud)
通过这种方式,我在整个公司实现了 Knife 配置的标准化,这反过来意味着在 wiki 中共享的任何代码片段或 Knife 调用都适用于每个人。刀本身有足够的混乱和魔力——不同的配置只会让它变得更糟。此外,每个人都有的小魔术片段好处,像这样一个为了让knife ssh
使用登录用户的配置~/.ssh/config
还有共享秘密的问题:厨师服务器的验证密钥、存储在 中的 AWS 密钥knife-secrets.rb
、EC2 的 SSH 私钥、加密的数据包密钥等等。我们绝对不希望它们存储在存储库中 - 或者,实际上,它们没有安全加密的任何地方。因此,我们将这些文件作为一个.tar.gz
文件分发给公司中的每个人,并通过 Dropbox 共享。
配置这一切变得越来越复杂,我希望团队中的人实际使用这个东西,所以有最后一个元素:rake init
创建.chef
目录、符号链接config/knife.rb
、解密和chef-secrets.tgz
解压文件的任务,确保用户的私有 Opscode 平台密钥在那里并且.chef/knife-local.rb
正确配置,符号链接刀插件,并在目录和文件中设置适当的权限。此任务设置为可以安全地在已初始化的存储库上多次运行(例如更新机密或刀插件)。
还有一个辅助任务,可以重新打包所有机密,将 tarball 加密给每个人,并将其复制到 Dropbox,以便更轻松地添加新员工或更改机密。
关于多个环境:Chef 有一个名为environment的功能。我还没有使用它,但它应该可以满足您的需求。您还可以通过拥有两个独立的 Hosted Chef 组织或 Chef 服务器来严格分离生产环境(以避免开发人员拥有以任何方式与生产环境相关的任何密钥)。这个 Knife.rb 片段展示了如何根据当前检出的分支以不同的方式配置Knife - 您可以使用它来设置环境以及厨师服务器的 url。还有一个名为 Knife-flow 的 Knife 插件 ,提供了更完整的两组织工作流。