Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vagrant 跨多个项目共享漫游配置_Vagrant_Puppet_Vagrantfile - Fatal编程技术网

Vagrant 跨多个项目共享漫游配置

Vagrant 跨多个项目共享漫游配置,vagrant,puppet,vagrantfile,Vagrant,Puppet,Vagrantfile,我有几个服务,每个服务都位于自己的Git存储库中 每个服务都是自包含的,并且彼此独立运行 我希望它们在同一个虚拟机中运行 如何使用Vagrant建立包含这些服务的共享开发环境 (请注意,我希望避免为每个repo创建一个Vagrantfile。)创建一个自定义的cookbook/puppet清单或shell provisioner,它将签出单个git存储库并运行服务 可以找到Vagrant中供应器的更多详细信息/配置选项 这里 最简单的方法就是安装烧杯。在Puppet Forge上找到一个成熟的模

我有几个服务,每个服务都位于自己的Git存储库中

每个服务都是自包含的,并且彼此独立运行

我希望它们在同一个虚拟机中运行

如何使用Vagrant建立包含这些服务的共享开发环境


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

创建一个自定义的cookbook/puppet清单或shell provisioner,它将签出单个git存储库并运行服务

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


最简单的方法就是安装烧杯。在Puppet Forge上找到一个成熟的模块作为指导。您需要
spec/spec\u helper\u acceptance.rb
spec/acceptance/nodesets/default.yml
,并且需要从
Gemfile
中选择gem进行系统测试

现在创建一个文件
spec/acceptance/yourclass\u spec.rb
,让它应用您的类以您想要的方式配置VM

为了满足多个git回购中多个项目的需求,您可以从
spec/spec\u helper\u acceptance.rb
中安装它们

或者,您可以设置
.fixtures.yml
puppetlabs_spec_helper
,并从spec helper内运行
bundle exec rake spec_prep

要想了解它,请克隆一些锻造模块,如
puppetlabs/apache

bundle install
export BEAKER_destroy=no
bundle exec rspec spec/acceptance/some_spec.rb
测试完成后,您可以登录到您的虚拟机

这是一个学习曲线,但这意味着你有一种快速配置虚拟机的方法,你也可以正确地测试它们


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

也许我错过了一些东西,但听起来您可以运行一个虚拟机,只需将共享文件夹与您正在使用的服务的不同文件夹一起使用

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

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文件,因为绝对路径主要与您自己的设置一致(您可以使用user_变量等,但这并不理想)

一种方法涉及使用Vagrant和Git子树从单个repo引用和签出外部组件

让我们假设我们有三个不同的repo,服务认证、服务通知和核心,每个都包含我们想要配置的组件

我们将创建一个repo,例如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子树
添加、更新和推送组件

根据项目的特点和团队的组织,此解决方案可能适合也可能不适合


我已经写了更多关于如何配置和使用子树的详细信息。

您可以在docker中运行deploy服务,然后VM将提供docker吗?或者,您创建一个VM并从不同的report中提取每个服务,感谢您的快速回答!您的方法的问题是,我需要保持vm与本地机器(vm外部)中的repo同步。为了增加复杂性,我不想编译和部署我的服务(然后从vm中提取它们)。原因是我使用的解释语言不需要编译部署周期,比如Java,来调试/测试代码。每个repo在.gitignore文件中排除的文件中都有自己的自定义配置。因为我想自动化开发环境设置,所以有必要使这些repo(及其各自的配置)与/vagrant保持同步。您提到的缺点可以通过创建一个引导脚本来克服,开发人员必须在第一次运行vagrant之前运行该脚本(可能该脚本可以运行vagrant本身)。我同意,如果您想与团队共享此配置,这不是最好的方法。根据您的需要,可能会有解决方案,但我想这足够简单,适合您的一般情况。如果我需要在VM上运行服务时手动检查和调试服务,该怎么办,而不仅仅是运行测试?这就是导出烧杯_destroy=no所实现的。测试完成后,虚拟机仍然存在,您可以使用vagrant全局状态访问它们,然后使用vagrant ssh访问它们。如果您使用Ruby,这很酷。我将在未来的项目中考虑到这一点。谢谢