跨多个项目的共享Vagrant配置

时间:2016-04-01 19:44:42

标签: vagrant puppet vagrantfile

我有一些服务,每个服务都在自己的Git存储库中。

每项服务都是独立的,并且彼此独立运行。

我希望它们在同一个VM中运行。

如何使用Vagrant设置包含这些服务的共享开发环境?

(请注意,我希望避免每个repo创建一个Vagrantfile。)

4 个答案:

答案 0 :(得分:0)

创建一个自定义cookbook / puppet清单或shell配置程序,它将检出单个git存储库并运行该服务。

可以找到Vagrant中配置程序的更多详细信息/配置选项 这里

https://www.vagrantup.com/docs/provisioning/basic_usage.html

答案 1 :(得分:0)

最简单的方法就是设置Beaker。在Puppet Forge上找到一个成熟的模块以获得指导。您需要spec/spec_helper_acceptance.rbspec/acceptance/nodesets/default.yml,并且您需要从Gemfile选择Gems的系统测试。

现在创建一个文件spec/acceptance/yourclass_spec.rb,让它只是应用你的类来按照你想要的方式配置VM。

要解决多个git仓库中多个项目的需求,您可以在spec/spec_helper_acceptance.rb内安装所有项目。

或者,您可以设置.fixtures.ymlpuppetlabs_spec_helper,并在规范帮助程序中运行bundle exec rake spec_prep

为了解决这个问题,请克隆一些Forge模块,例如puppetlabs/apache

bundle install
export BEAKER_destroy=no
bundle exec rspec spec/acceptance/some_spec.rb

测试完成后,您可以登录虚拟机。

这是一个学习曲线,但这种方式意味着您有一种快速配置VM的方法,您也可以正确测试它们。

Beaker甚至可以启动多个虚拟机,以便您可以在需要时将所有服务一起运行。

答案 2 :(得分:0)

也许我想念一些东西,但听起来你可以运行一个虚拟机,只使用不同文件夹的共享文件夹和你正在使用的服务。

共享文件夹可以采用绝对路径(不仅仅是您定义Vagrantfile的当前项目中的相对文件),因此您可以混合使用

等文件夹
Vagrant.configure(2) do |config|

  config.vm.box = xxx
  blablabla

  config.vm.synced_folder "/Users/fhenri/project/service1", "/project/service1"
  config.vm.synced_folder "/Users/fhenri/project/examples/service2", "/project/service2", type: "nfs"
  config.vm.synced_folder "/Users/fhenri/project/ruby/service3", "/opt/rubyservice"

因此,在配置此VM时,您可以配置每项服务。当文件夹与项目源共享时,您在原始文件夹中所做的任何更改都将在VM上同步

您还可以在此单个Vagrant文​​件中定义多台计算机,并在每台计算机中都有一个共享文件夹

缺点:您无法真正共享此Vagrantfile,因为绝对路径主要与您自己的设置对齐(您可以使用user_variable等等但不理想)

答案 3 :(得分:0)

一种方法是使用Vagrant和Git子树从单个仓库中引用和签出外部组件。

假设我们有三个不同的repos,service-auth,service-notifier和core,每个都包含我们想要配置的组件。

我们将创建一个回购,例如dev-env,包含Vagrantfile和每个外部repo的一个子树。 Vagrant文​​件如下所示:

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(2) do |config|
config.vm.box = “ubuntu/trusty64”
config.vm.network :forwarded_port, host: 8080, guest: 8080 # core
config.vm.network :forwarded_port, host: 8081, guest: 8081 # service-auth
config.vm.network :forwarded_port, host: 8181, guest: 8181 # service-notifier
end

(我们假设我们的组件将侦听不同的TCP端口。)

然后,我们将使用git subtree添加,更新和推送我们的组件。

根据您的项目特点和团队的组织,此解决方案可能适合与否。

我已经写了an article,详细说明了如何为此目的配置和使用子树。