Vagrant 流浪汉和厨师的开发环境

Vagrant 流浪汉和厨师的开发环境,vagrant,chef-infra,development-environment,test-kitchen,berkshelf,Vagrant,Chef Infra,Development Environment,Test Kitchen,Berkshelf,我们最近开始为连续部署场景实施适当的基于CI的构建管道,并决定使用Chef作为我们的CM工具。我们还使用Vagrant为我们的开发人员创建隔离的本地开发环境,因为它允许简单的“Vagrant up”和环境运行。流浪汉应该支持零号厨师,它确实支持零号厨师。然而,这需要在“cookbooks”目录中保存预下载的cookbooks,这意味着如果没有“数据包管理器”,管理依赖项及其版本将是一件非常痛苦的事情 我想做的是使用Policyfile或Berksfile来管理cookbook依赖项。不幸的是,这

我们最近开始为连续部署场景实施适当的基于CI的构建管道,并决定使用Chef作为我们的CM工具。我们还使用Vagrant为我们的开发人员创建隔离的本地开发环境,因为它允许简单的“Vagrant up”和环境运行。流浪汉应该支持零号厨师,它确实支持零号厨师。然而,这需要在“cookbooks”目录中保存预下载的cookbooks,这意味着如果没有“数据包管理器”,管理依赖项及其版本将是一件非常痛苦的事情

我想做的是使用Policyfile或Berksfile来管理cookbook依赖项。不幸的是,这不起作用(或者我做错了什么)。首先,我无法找到一种使用Vagrant实现Policyfile的方法,尽管该特性是在2年前发布的。唯一出现的是。Berkshelf的方式更具前景,因为有一个“vagrant Berkshelf”插件用于vagrant,它正是我想要的…但是有一些小问题。其中一个问题是对ChefDK的依赖。然而,最主要的一点是,它有点被弃用,取而代之的是TestKitchen

所以,TestKitchen,人们对这个整洁的工具大惊小怪。它支持Policyfiles和Berkshelf,它有一个使用Vagrant运行VM的Vagrant提供程序。那怎么了?据我所知,Chef's TestKitchen是为Cookbook开发者设计的,因为它允许自动化本地Cookbook测试,等等。但是其他开发者呢?例如,如果开发人员只在项目(应用程序)本身上工作,而不在基础设施上工作,那么为什么开发人员甚至需要ChefDK呢?开发人员想要做的就是下载应用程序的源代码(在我们的例子中是web应用程序),其中包括根目录中的Vagrantfile,然后简单地键入“vagrant up”(因为VirtualBox和vagrant已经安装在机器上)并开始工作

是的,可以使用TestKitchen作为流浪者的包装(说它很好)。开发人员将输入“kitchen converge”,然后开始工作,而不是“Wagrant up”。但这意味着开发人员已经安装了ChefDK,以及VirtualBox和Vagrant


有什么[好的和现代的]方法不把TestKitchen用作开发环境提供者吗?或者这不被认为是一种不好的做法吗?在我看来,如果开发人员想在他的笔记本电脑上旋转dev env,那么他必须安装ChefDK。如何设置开发环境?

构建policyfile工作流时希望使用Chef服务器和Chef客户端。因此,您通常会通过Vagrant中的
chef_客户机
provisioner使用它。不过,这可能不是您想要的工作流。这将有可能建立一些使用政策导出系统和一些花哨的文件欺骗,使伯克斯一样的流浪插件,但你必须自己做


厨师界的大多数人已经停止使用Vagrant来建立有利于云系统的开发环境,因为在VBox虚拟机中进行“类似生产”的操作通常不可能如您所想。

我们使用Jankins更新厨师服务器上的食谱。此外,我们还使用Berkshelf来控制cookbook依赖项

流浪汉可以使用厨师客户端提供机器。它连接到chef服务器,从机器上获取最新的食谱/环境/角色和供应

这是可行的,但提供流浪机器需要很多时间。所以它现在起作用了,但我们正在寻找一些更好的选择

chef zero
可以用于调试(但最好使用test kitchen),我认为它不适合您想要的工作流


另外,你可以检查这些流浪插件,它们真的很有用:
vagrant omnibus,vagrant cachier,vagrant vbguest,vagrant hostsupdater,vagrant notify

为什么安装chefdk不如安装vagrant和一堆插件来支持chef作为流浪供应器呢?这个问题可能是基于高度的意见,因此不适合StackOverflow。Tensibai嗯..我现在所能做的就是希望它不会被否决=)谢谢你的意见!这个问题对我来说很清楚,可能对其他媒体(可能在邮件列表上)有用。所以没有理由投反对票,我确实投票以基于意见的方式关闭了它,但我认为不值得投反对票。我认为你不需要整个chefDK,只需要自己安装测试厨房作为rubygem。谢谢,这很好。但是,如果cookbooks存储在Chef服务器上,并且本地Vagrant实例通过从服务器提取最新cookbooks的Chef客户端进行配置,则environment现在与网络连接绑定。所以,如果我想在飞行期间在飞机上工作,工作流程会中断,因为我没有烹饪书…@你需要互联网来提供机器。在那之后,你可以离线工作:只要在飞机上做
vagrant up
。即使您为机器配置了
chef zero
,您也可能需要internet连接以满足某些配置需求,如:安装软件、克隆存储库、下载数据库转储等。有人建议将Vagrant文件以及其他内容(基本上是“chef repo”)放入一个单独的repo中,并使用CI更新那里的烹饪书,以及在厨师服务器上。这样,在克隆repo时,就可以从本地cookbooks目录中提供流浪VM。不过还有一个问题,CI应该在哪个阶段更新食谱?每次他们稳定下来?或者即使构建失败,它仍然应该用新版本更新上面的repo?根据该厨师报告创建一个基于问题的分支机构,并保持该特定分支机构的更新?但是如果飞机上的工作需要更改烹饪手册并重新配置机器,会发生什么情况?只需手动修改虚拟机,完成该功能,然后回到办公室修复