【问题标题】:Development environment with Vagrant and ChefVagrant 和 Chef 的开发环境
【发布时间】:2017-01-12 15:48:34
【问题描述】:

我们最近开始为持续部署场景实施适当的基于 CI 的构建管道,并决定使用 Chef 作为我们的 CM 工具。我们还使用 Vagrant 为我们的开发人员创建隔离的本地开发环境,因为它允许简单的“vagrant up”并且环境只是运行。 Vagrant 应该支持 Chef Zero,它确实如此。但是,这需要将预下载的说明书保存在“说明书”目录中,这意味着如果没有“数据包管理器”,管理依赖项及其版本将是一个巨大的痛苦。

我想做的是使用 Policyfile 或 Berksfile 来管理说明书依赖项。不幸的是,这不起作用(或者我做错了什么)。首先,我找不到使用 Vagrant 实现 Policyfile 的方法,尽管该功能是在 2 年前发布的。唯一弹出的是this。 Berkshelf 方式更有希望,因为 Vagrant 有一个 'vagrant-berkshelf' 插件,它完全符合我的要求......但有一些小问题。问题之一是对 ChefDK 的依赖。然而,主要的一点是它已被弃用,取而代之的是 TestKitchen。

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

是的,可以将 TestKitchen 用作 Vagrant 包装器(this guy 说这很好)。开发人员不会输入“vagrant up”,而是输入“kitchen blend”,然后开始工作。但这意味着开发人员已经安装了 ChefDK,以及 VirtualBox 和 Vagrant。

是否有任何 [好的和现代的] 不使用 TestKitchen 作为开发环境提供者的方法?或者它不被认为是一种不好的做法?对我来说,如果开发人员想在他的笔记本电脑上旋转开发环境,他必须安装 ChefDK 似乎很奇怪。您是如何设置开发环境的?

【问题讨论】:

  • 为什么安装 chefdk 不如 vagrant 和一堆插件来支持 chef 作为 vagrant 供应商?这个问题可能是高度基于意见的,因此不适合 StackOverflow。
  • Tensibai 好..我现在只能希望它不会被否决 =) 感谢您的意见!
  • 嗯,这个问题对我来说很清楚,可能对其他媒体有用(可能在邮件列表discourse.chef.io 上)。所以没有理由反对它,我确实根据意见投票关闭它,但我认为它不值得反对。
  • 我认为您不需要整个 chefDK,只需将 test-kitchen 安装为 ruby​​gem 即可。

标签: vagrant chef-infra development-environment test-kitchen berkshelf


【解决方案1】:

我们使用 Jankins 来更新厨师服务器上的食谱。此外,我们使用 Berkshelf 来控制说明书的依赖关系。

Vagrant 可以使用 chef-client 配置机器。它连接到厨师服务器获取最新的食谱/环境/角色并配置机器。

它可以工作,但是配置 vagrant-machine 需要很多时间。所以它现在有效,但我们正在寻找一些更好的选择。

chef-zero可以用来调试(但最好用test kitchen),我觉得不适合你想要的工作流。

另外,您可以查看这些 vagrant 插件,它们真的很有帮助:vagrant-omnibus, vagrant-cachier, vagrant-vbguest, vagrant-hostsupdater, vagrant-notify

【讨论】:

  • 谢谢,这很好。但是,如果食谱存储在 Chef 服务器上,并且本地 Vagrant 实例是通过从服务器中提取最新食谱的 chef-client 提供的,则环境现在与网络连接相关联。所以,假设我想在飞行期间在飞机上处理项目,工作流程就会中断,因为我没有食谱......
  • @lime 您需要 Internet 来配置机器。之后,您可以离线工作:只需在飞机上做vagrant up。即使您使用 chef-zero 配置机器,您也可能需要 Internet 连接来满足某些配置需求,例如:安装软件、克隆存储库、下载数据库转储等。
  • 有人建议将 Vagrantfile 以及其他东西(基本上是“厨师回购”)放入一个单独的回购中,并使用 CI 来更新那里以及厨师服务器上的食谱。这样,在克隆 repo 时,就可以从本地食谱目录中配置 Vagrant VM。但是仍然存在一个问题,CI 应该在哪个阶段更新说明书?每次他们稳定?或者即使构建失败,它仍然应该用新版本更新上面的 repo?在这个 chef-repo 上创建一个基于问题的分支并保持该特定分支的更新?
  • 但是,如果飞机上的工作需要更改食谱并重新配置机器,会发生什么?只需手动修改虚拟机,完成功能,回到办公室后相应地修复食谱?
  • 您应该只将工作和经过测试的食谱推送到厨师服务器,否则可能会给所有使用它们的用户带来问题。例如,您将 master 分支与 chef-server 同步,然后您可以在将代码合并到 master 之前运行一些自动测试:cookstyle、foodcritic、单元测试等。
【解决方案2】:

policyfile 工作流的构建期望使用 Chef Server 和 chef-client。因此,您通常会通过 Vagrant 中的 chef_client 供应商使用它。不过,这可能不是您想要的工作流程。可以构建使用策略导出系统和一些花哨的文件技巧来制作类似 Berks 的 Vagrant 插件的东西,但你必须自己做。

大多数 Chef 世界已经停止使用 Vagrant 来设置支持云系统的开发环境,因为在 VBox VM 中制作“类似生产”的东西通常不像您想象的那样可能。

【讨论】:

    猜你喜欢
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    相关资源
    最近更新 更多