Seth Vargo 是一位开源程序员,也是卡内基梅隆大学的毕业生。他专长于 Ruby 开发,曾在 Chef、 CustomInk 和 HashiCorp 工作。在今年的 All Things Open 会议上,Seth 将会谈论 Vagrant。但是,Vagrant 是什么?为什么你应该关心它?
在这个访谈中了解更多。
什么是 Vagrant?
Vagrant 是一个用于创建和配置轻量级、可重现和可移植开发环境的工具。Vagrant 提供了一个统一的界面,用于使用命令行控制一个或多个虚拟机的生命周期。由于 Vagrant 是平台无关的,你可以与任何人共享相同的 Vagrantfile;他们是否使用 Windows、Linux 或 Mac 都无关紧要。
Vagrant 支持多种虚拟化技术,包括 VirtualBox 和 VMware。Vagrant 的可插拔性质使得社区能够策划对其他虚拟化技术的支持,包括 Parallels、 Amazon Web Services 和 libvrt。
Vagrant 如何帮助 Ruby 开发?它对其他类型的开发有用吗?
由于 Vagrant 是用 Ruby 编写的,用户通常认为 Vagrant 仅对 Ruby 开发有用。事实并非如此。Vagrant 对几乎任何开发环境都很有用。
根据敏捷成本曲线,修复生产环境中的错误估计成本是修复开发环境中相同错误的 150 倍。虽然软件(算法)错误很容易识别并编写快速测试,但它们并不是生产环境中发生的唯一类型的错误。第二常见的错误在于生产系统的配置,特别是生产系统和开发环境之间配置的差异。即使使用完美和精确的工程,包或操作系统版本的差异也可能在部署时造成灾难性的结果。因此,通常会推动增加开发环境和生产环境之间的奇偶性。
Vagrant 是解决此问题的完美工具,因为它使开发人员可以使用他们在本地机器上熟悉的相同工具和编辑器,但在虚拟化层使用与生产环境相同的操作系统和软件包。与 Packer 这样的工具结合使用,可以在不牺牲本地开发技术的情况下实现近乎完美的生产奇偶性。换句话说,开发人员工作流程不会受到中断。
即使生产奇偶性不是问题,Vagrant 仍然是一个非常实用的工具。项目通常有许多依赖项需要在开发发生之前安装和配置。Docker 在这个领域越来越受欢迎;用户只需在项目存储库中使用预先配置的 Dockerfile 运行 Docker 即可。Vagrant 的工作方式非常相似,但由于它位于虚拟化层,因此提供了额外的隔离层。如果你需要虚拟硬件(例如 USB 端口、音频或高级网络)、对 Linux 以外的操作系统的支持,或者虚拟化提供的优于容器化技术的额外隔离层,Vagrant 是一个极佳的选择。
事实上,它们不是互斥的。Vagrant 支持构建和运行 Docker,既可以作为提供程序,也可以作为配置程序。这意味着 Vagrant 可以创建 Docker 镜像,然后自动运行它们。如果你的系统无法原生运行 Docker,Vagrant 将自动配置一个能够运行 Docker 的虚拟机,并设置所有与你的主机之间的正确连接。通过这种方式,你可以获得虚拟化的隔离性,但同时拥有容器化的灵活性和速度。
最后,Vagrant 与你或你的组织可能已经使用的工具深度集成。例如,Vagrant 对几乎所有主要的配置管理提供程序都有一流的支持,包括 Ansible、 CFEngine、 Chef、 Puppet 和 SaltStack。例如,如果你已经在使用 Chef 来配置你的基础设施,只需在 Vagrantfile 中添加几行代码,Vagrant 就会在你的本地开发环境中使用配置生产基础设施的相同 cookbooks。
你“迷上” Vagrant 的那一刻是什么时候?作为用户,你是否立即看到了它的价值,还是它在你身上逐渐显现?
当我第一次开始学习软件开发时,我经常搞砸。我认为搞砸是人的本性;这是一种很棒的学习技巧。不幸的是,有时你会把你的本地系统搞砸到无法修复的地步。当我进入配置管理领域时,灾难发生的概率大大增加。一方面,我真的很高兴学习一项新技术并探索它。另一方面,我非常害怕,因为一个简单的错别字或误解,我一天需要重新映像我的笔记本电脑 50 次。这种恐惧最终占据了上风,我停止了创新和迭代。即使我独自工作,我的反馈时间也增加了,我的周期下降了,我很快变得效率低下;害怕搞砸自己的机器已经超过了我学习的意愿。
那时我遇到了 Vagrant。
Vagrant 为我提供了快速迭代整个系统而无需接触我自己的系统的能力。当时我还是一名贫穷的大学生,Vagrant 和 VirtualBox 都是完全免费和开源的。这非常符合我的预算(0 美元)!
随着我对 Vagrant 的进一步探索,我也开始将它用于我的软件项目。当我开始在团队中工作时,Vagrantfile 被证明是非常宝贵的。设计师可以启动一个网站,而无需安装任何东西。质量保证 (QA) 可以测试网站的 beta 版本,而无需知道如何设置它。新开发人员可以在几个小时而不是几天内入职。意识到所有这一切都是由软件实现的,真是令人惊叹。
你喜欢的编程语言是什么?
这是一个棘手的问题。我的第一个答案是“所有语言”。我是一名多语言软件工程师,但我目前最密切合作的是 Go 和 Ruby。我从不让我的经验或当前技术决定未来的技术使用。对于一个新项目,我喜欢尝试新的编程语言。
你管理 vagrant 开发机器的工作流程是什么?
我有一个 Vagrantfile,它创建了虚拟机的配置。我通常使用 shell 脚本,但对于更复杂的情况,我将使用带有内置 Chef 配置的 Chef cookbook。所有代码都位于我的本地机器上,我使用 Sublime Text、 iTerm 和五年积累的 shell 快捷方式和自定义设置。我的本地机器与 Vagrant 创建的虚拟机共享一个文件夹。代码在 VM 中执行,但源文件在我的本地机器上控制。
你使用什么版本控制系统?
我主要使用 Git,尽管过去我也使用过 SVN 和 Mercurial。
新 Vagrant 用户常犯的最大错误是什么?
我认为这更多的是一种误解而不是错误,许多 Vagrant 用户认为它对他们的用例来说太重了,因此他们会选择 shell 脚本或 README 中的说明。这种方法的问题在于它很快就会过时,它是特定于操作系统的,并且往往会导致“它在我的机器上工作”这句话。
新用户应该何时开始使用 Vagrant?立即开始,还是这是一个应该逐步掌握的高级工具?
Vagrant 专为初学者设计,但功能强大到足以满足最有经验的开发人员的需求。Vagrant 为新用户定义了一条快乐的路径,它将所有旋钮调整到最可能的配置。这可能并不总是最快、最安全或性能最高的配置,但它是最有可能在用户无需自定义任何内容的情况下工作的配置。Vagrant 的工作流程应该始终是
$ vagrant up
高级用户有能力调整这些旋钮,使 Vagrant 更安全、性能更高、更定制化。Vagrant 将几乎所有配置选项都作为 Vagrantfile DSL 的一部分公开,并且 它们都有文档记录。
总而言之,Vagrant 随着用户的发展而发展。随着开发需求的变化,Vagrant 能够适应,因此尽早采用 Vagrant 并让它随着项目一起成长并没有什么坏处。
你是如何参与开源的?
当我在卡内基梅隆大学读本科时,我有两位教授是开源的拥护者:Larry Heimann 教授和 Jeria Quesenberry 教授。我参与了许多开源项目,并回馈了社区。我的第一份实习工作是在 T 恤公司 CustomInk,他们也是开源的拥护者,既是消费者也是生产者。我在那里工作期间有能力参与许多开源项目。从那时起,我只为生产开源软件的组织工作。
演讲者访谈
本文是 All Things Open 演讲者访谈 系列的一部分。 All Things Open 是一场探索企业中的开源、开放技术和开放网络的会议.
3 条评论