Vagrant是什么,不是什么。

Vagrant是构建在虚拟化技术之上的虚拟机运行环境管理工具。通过Vagrant可以方便实现的对虚拟机的管理,包括建立和删除虚拟机、配置虚拟机运行参数、管理虚拟机运行状态、自动化配置和安装开发环境必须的各类软件、打包和分发虚拟机运行环境等。

Vagrant的运行,需要依赖某项具体的虚拟化技术。由于VirtualBox是一项开源的虚拟化软件,可以同时在Windows、Linux、Macintosh、SSolaris等操作系统上运行并支持众多对众多操作系统的虚拟化,因此,在Vagrant开发的初期,唯一支持的是VirtualBox。随着虚拟化技术的快速发展,现在已经有了更多的虚拟化技术可供选择。VMware、HyperV、Docker等都已经可以通过Vagrant的管理而工作。Windows的HyperV技术在部分Windows发行版本中的集成,使得Vagrant在“开盒即用”的特性方面前进了一大步。

因此,Vagrant是虚拟机管理工具,不是某项具体的虚拟化技术。对于各项虚拟化技术而言,Vagrant提供了一套基于配置文件和命令行的管理工具。也正是因为如此,Vagrant完成了对虚拟化技术在一定程度上的封装。这为将虚拟化技术引入到基于桌面运行环境的开发工作流中创造了便利条件。

为什么要使用Vagrant

尽可能避免”Work on my machine“错误

在Vagrant没有出现之前,在服务器端进行开发的人们通常都拥有一个专用的开发帐号。使用这个帐号,开发者可以在一定限度内配置自己的开发环境、完成编码、进行测试并完成向开发团队代码库的代码推送。于是,在团队合作开发的过程中,一个问题出现了:当A进行了一次新的代码推送之后,原本可以通过的代码持续集成测试无法通过了。通过代码检查,发现A的代码出现了异常。而A在自己的开发环境中的测试是可以通过的。这类错误被Vagrant称作为“Work on my machine”错误。这类错误要定位解决通常耗时很久。在一个可以进行面对面开发的团队中,问题的定位由于沟通手段的丰富相对较快。如果是分散在不同地方的人在合作开发,那么要解决此类错误,就没有那么简单了。

小张在自己的机器上辛苦的完成了一项功能开发,通过了本机上的各项测试,高高兴兴的向团队代码库提交的自己的工作成果。心想终于可以放松一下了。“是不是可以买一只机械键盘犒劳一下?晚上和伙伴们出去聚会吧!嘿嘿。”小A心里美滋滋的想。

“小张,你来一下,代码有问题”。临近下班的时候,小A接到QA小组的一个电话。“怎么回事?”小张一头雾水的走进了QA小组的办公区。

“你今天下午提交的代码,无法通过测试。你自己做了测试了吗?”,老王是QA小组测试负责人,他面色凝重的问小张,“咱们就要发布一个新的代码版本了。这个时候你的代码出问题,可能会影响代码发布的。要不你赶紧看看?明天上午能修复吗。我们的测试报告和测试规范在这里”。

“明明没有问题的呀”,出了QA的办公区,小张仍然迷惑不解。“在我的机器上明明是可以运行的。而且为了晚上的聚会,测试规范中定义的各项测试也是提前跑过的呀。看来今天晚上的聚会要取消了。“小张无奈的拿出电话,打算给好友们打电话,通知自己无法参加晚上的聚会了。

好吧,借助Vagrant,每一个开发者都可以得到一份服务器运行环境的虚拟机,可以以虚拟机的方式运行一个微型的”生产环境“。这样,在提交代码之前,开发这就可以在虚拟机上完成”生产环境“的验证。自然可以解决上面的问题了。

缩短搭建开发环境的时间

搭建一个开发环境,需要完成操作系统的安装,必要的开发支撑软件的安装,配置操作系统和代码运行环境。如果所有的操作都需要由人来手动操作的话,一个下午的时间是必要的。搭建开发环境是团队中新人加入时的必不可少的第一课。而团队的老人们,无可避免的会接到无数的“新手”的发问。更不用说,当著名的Wxdows系统需要重新安装系统的时候,无论谁,基本上一天的工作时间算是交代了,更不用说各类开发软件的配置如果会影响代码执行结果的时候会引入什么样的“灾难”了。使用Vagrant实现开发环境的快速搭建成为提升效率的显著功能特性之一。

Vagrant提供了统一的安装程序配置环境:

  • 使用统一的配置文件( vagrantfile )实现对服务器的统一配置。
  • 使用共享文件夹( shared folder )实现代码编辑向“服务器”的快速提交
  • 使用软件配置脚本( Provisioning scripts )实现服务器上的运行环境的快速建立
  • 拥有标准化的虚拟机分享网络,极大缓解了分享开发环境配置时的网络带宽压力
  • 可以具备一个供安装维护测试使用的可抛弃的服务器端环境。

小李是进入开发团队的新人。从学校毕业出来,小李就到了一个公司从事服务器端的软件开发工作。由于兴趣爱好的原因,他新近加入了这个网游开发团队。他接到的第一个命令就是“搭建一个服务器工作日志分析系统,为服务器代码优化改进做准备”。

小李从团队项目经理那里得到了服务器环境安装手册以及服务器日志数据库设计文档。小李需要在自己的机器上用虚拟机安装一套服务器环境,用以进行日志数据的分析和提取。

“好吧,估计这几天的时间要搭到系统安装里去了。”小李做好了心理准备,打开了服务器环境安装手册。意外的,手册很简单:

  • 安装Vagrant和VirtualBox,从文件服务器(地址XX.XX.XX.XX/Software)下载Vagrant、VirtualBox安装文件,并完成安装
  • 执行 git clone git@xx.xx.xx.xx:vagrantconfig.git 获取vagrant配置文件
  • 进入vagrantconfig目录,运行 Vagrant up ftp://xx.xx.xx.xx/vagrant/trusty-server-cloudimg-amd64-vagrant-disk1
  • 执行 vagrant ssh 验证安装
  • 从文件服务器(xx.xx.xx.xx/data)下载日志数据库dump文件,完成Mysql数据库内容的加载
  • ……

“这就完了?”半个小时后,小李目瞪口呆的看着自己机器上运行的虚拟机,一套服务器日志系统已经加载完成了。小李已经可以着手进行数据的分析并开始做具体编码设计了。

小结

如果还在为“Work on my machine”错误头疼,如果安装开发环境还是团队心头的痛,那为什么不试试用用Vagrant呢?

Vagrant的主要使用者

对于需要在服务器端进行开发的人,Vagrant管理的虚拟机镜像提供了统一的生产运行环境。开发者可以随心所欲的决定什么时候想“服务器”端发布程序,什么时候在“服务器”端进行必要的测试,而丝毫不用担心会影响生产环境服务器的稳定运行。

对于各类设计人员,使用Vagrant,可以让设计人员可以随心所欲的选择自己的开发用操作系统、设计软件、编辑IDE软件,可以通过与虚拟机之间的共享目录,快速实现设计文件在生产环境中的测试验证。

对于系统维护人员,使用Vagrant,可以随意进行对系统安装设置的过程进行演练,验证工程安装手册的完备程度。也可以对系统维护中的各项操作指令随意进行实验。这对于提升售后服务团队的问题快速解决能力,获得实战经验的非常重要的手段。

Vagrant对开源开发的贡献

开源的开发者常常无法像一个普通团队那样面对面的坐在一起进行开发工作。由于开发团队是一种松散的组织模式,因此,也不是每一个开发者都可以获得在服务器端上的开发授权。此时Vagrant就提供给这些开发者必要的代码运行环境,极大程度的提升了开源开发者向开发中心小组提交代码的质量。此外,Vagrant的虚拟机分享模式,也使得开源开发者获得统一的服务器运行环境的成本变得异乎寻常的低廉。

让 VAGRANT 启动并运行起来相关推荐

  1. 新装oracle如何启动服务,Oracle数据库新装之后出现的监听程序无法正常启动和运行(Oracle-12514)问题...

    修改安装目录下的配置文件 比如:F:\app\admin-PC\product\11.2.0\dbhome_1\network\admin\ 修改这个目录下的listener.ora和tnsnames ...

  2. linux启动设置运行级别,Linux的运行级别和设置开机启动服务的方式

    Linux的运行级别 什么是运行级别呢?简单点来说,运行级别就是操作系统当前正在运行的功能级别.级别是从0到6,具有不同的功能.这些级别定义在/ect/inittab文件中.这个文件是init程序寻找 ...

  3. ASP.NET Core 3.x启动时运行异步任务(二)

    这一篇是接着前一篇在写的.如果没有看过前一篇文章,建议先去看一下前一篇,这儿是传送门   一.前言 前一篇文章,我们从应用启动时异步运行任务开始,说到了必要性,也说到了几种解决方法,及各自的优缺点.最 ...

  4. ASP.NET Core 3.x启动时运行异步任务(一)

    这是一个大的题目,需要用几篇文章来说清楚.这是第一篇.   一.前言 在我们的项目中,有时候我们需要在应用程序启动前执行一些一次性的逻辑.比方说:验证配置的正确性.填充缓存.或者运行数据库清理/迁移等 ...

  5. 如何在ASP.NET Core程序启动时运行异步任务(3)

    原文:Running async tasks on app startup in ASP.NET Core (Part 3) 作者:Andrew Lock 译者:Lamond Lu 之前我写了两篇有关 ...

  6. 如何在ASP.NET Core程序启动时运行异步任务(2)

    原文:Running async tasks on app startup in ASP.NET Core (Part 2) 作者:Andrew Lock 译者:Lamond Lu 在我的上一篇博客中 ...

  7. 如何在ASP.NET Core程序启动时运行异步任务(1)

    原文:Running async tasks on app startup in ASP.NET Core (Part 1) 作者:Andrew Lock 译者:Lamond Lu 背景 当我们做项目 ...

  8. 在Spring Boot启动时运行代码

    Spring Boot会自动为我们执行很多配置,但是迟早您将不得不做一些自定义工作. 在本文中,您将学习如何进入应用程序引导生命周期并在Spring Boot启动时执行代码 . 因此,让我们看看该框架 ...

  9. istio 和 kong_如何启动和运行Istio

    istio 和 kong by Chris Cooney 克里斯·库尼(Chris Cooney) 如何启动和运行Istio (How to get Istio up and running) 而一旦 ...

最新文章

  1. Maven工程构建时报编码警告的解决办法
  2. 是程序员,就用python导出pdf
  3. 解决springboot读取jar包中文件的问题
  4. Python 3.X 练习集100题 02
  5. 洛谷P2038 无线网络发射器选址
  6. 11 种方法教你用 Python 高效下载资源
  7. jvm初体验:堆溢出处理
  8. html怎么置顶图像,css怎么固定图片位置不变?
  9. css margin 塌陷 经典bug
  10. 一维优化 方法c语言,第三章一维优化方法
  11. 人工智能ai换脸技术_人工智能技术如何帮助企业改善营销
  12. 智能制造-低时延满足制造需求
  13. 统计函数耗费时间,简单的图像运算,定义感兴趣区域 第二章
  14. js使用页面打印window.print() 记录,并进行缩放打印
  15. 把Excel批注的“红三角”放在单元格左上角_Excel的批注功能,全部知道的不足10%,你会用的仅仅是冰山一角...
  16. email邮箱登陆验证实例
  17. 使用opencv调用摄像头识别颜色(python版)
  18. 高防CDN对于网站、平台有着至关重要作用?
  19. 从前端角度浅谈如何做好网站的SEO优化
  20. 记一次阿里电话面试| 技术征文

热门文章

  1. 【C++】Google C++编码规范(四):其他C++
  2. gb50243-2016通风与空调工程施工质量验收规范_《通风与空调工程施工质量验收规范》GB50243-2016 重点解读...
  3. shell python优势_python的优势
  4. ajax默认超时时间多久,请问chrome浏览器的默认超时时间是多久?
  5. Java程序员三年的工作经验,却不如一个新人的工资高???
  6. 微信小程序实现滑动翻页效果源码附效果图
  7. iOS通过CAShapeLayer和UIBezierPath画环形进度条
  8. iOS实现动态区域裁剪图片
  9. Vision 圖像識別框架的使用
  10. Docker容器入门-基本命令的使用