使用 Vagrant 在不同操作系统上测试脚本

Vagrant 帮助你在你的电脑上运行其他操作系统——这意味着你可以构建东西、测试东西,以及做一些疯狂的事情,而不会搞砸你自己的系统。
43 位读者喜欢这个。
Business woman on laptop sitting in front of window

图片来源:Mapbox Uncharted ERG, CC-BY 3.0 US

我很高兴使用 Vagrant 已经有一段时间了。我使用几种 DevOps 工具,并且将它们全部安装在一个系统上可能会变得很复杂。Vagrant 让你在不破坏你的系统的情况下做很酷的事情,因为你根本不必在你的生产系统上进行实验。

如果你熟悉 VirtualBoxGNOME Boxes,那么学习 Vagrant 就很容易了。Vagrant 是一个简单而干净的界面,用于处理虚拟机。一个名为 Vagrantfile 的配置文件,允许你自定义你的虚拟机(称为 Vagrant boxes)。一个简单的命令行界面让你启动、停止、暂停或销毁你的 boxes。

考虑这个简单的例子。

假设你想编写 Ansible 或 shell 脚本来在新服务器上安装 Nginx。你不能在自己的系统上这样做,因为你可能没有运行你想测试的操作系统,或者你可能没有你想做的事情的所有依赖项。启动新的云服务器进行测试可能既耗时又昂贵。这就是 Vagrant 发挥作用的地方。你可以使用它来启动虚拟机,使用你的脚本对其进行配置,并证明一切都按预期工作。然后你可以删除该 box,重新配置它,并重新运行你的脚本以验证它。你可以根据需要重复此过程多次,直到你确信你的脚本在所有条件下都能工作。你可以将你的 Vagrantfile 提交到 Git,以确保你的团队正在测试完全相同的环境(因为他们将使用完全相同的测试 box)。不再有“……但在我的机器上运行良好!”这样的问题。

开始入门

首先,在你的系统上安装 Vagrant,然后创建一个新文件夹进行实验。在这个新文件夹中,创建一个名为 Vagrantfile 的新文件,内容如下

Vagrant.configure("2") do |config|
  
  config.vm.box = "ubuntu/hirsute64"
  
end

你也可以运行 vagrant init ubuntu/hirsute64,它将为你生成一个新的 Vagrantfile。现在运行 vagrant up。此命令将从 Vagrant 注册表下载 ubuntu/hirsuite64 镜像。

Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'ubuntu/hirsute64'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'ubuntu/hirsute64' version '20210820.0.0' is up to date...
==> default: Setting the name of the VM: a_default_1630204214778_76885
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: hostonly
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Remote connection disconnect. Retrying...
    default: Warning: Connection reset. Retrying...
    default:
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!

此时,如果你打开你的 Vagrant 后端(例如 VirtualBox 或 virt-manager),你会在那里看到你的 box。接下来,运行 vagrant ssh 登录到该 box。如果你能看到 Vagrant 提示符,那么你就进去了!

~ vagrant ssh
Welcome to Ubuntu 21.04 (GNU/Linux 5.11.0-31-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Sun Aug 29 02:33:51 UTC 2021

  System load:  0.01              Processes:               110
  Usage of /:   4.1% of 38.71GB   Users logged in:         0
  Memory usage: 17%               IPv4 address for enp0s3: 10.0.2.15
  Swap usage:   0%                IPv4 address for enp0s8: 192.168.1.20


0 updates can be applied immediately.


vagrant@ubuntu-hirsute:~$

Vagrant 使用“基础 boxes”来启动你的本地机器。在我们的例子中,Vagrant 从 Hashicorp 的 Vagrant 目录 下载 ubuntu/hirsuite64 镜像,并插入 VirtualBox 以创建实际的 box。

共享文件夹

Vagrant 将你当前的文件夹映射为 Vagrant box 内的 /vagrant。这允许你使你的文件在你的系统和 box 内保持同步。这对于通过将你的文档根目录指向 /vagrant 来测试 Nginx 网站非常有用。你可以使用 IDE 进行更改,box 内的 Nginx 将会提供它们。

Vagrant 命令

有几个 Vagrant 命令可以用来控制你的 box。

一些重要的命令是

  • vagrant up:启动一个 box。
  • vagrant status:显示当前 box 状态。
  • vagrant suspend:暂停当前 box。
  • vagrant resume:恢复当前 box。
  • vagrant halt:关闭当前 box。
  • vagrant destroy:销毁当前 box。运行此命令将丢失存储在该 box 上的任何数据。
  • vagrant snapshot:拍摄当前 box 的快照。

尝试 Vagrant

Vagrant 是一个经过时间考验的工具,用于使用 DevOps 原则进行虚拟机管理。配置你的测试机器,与你的团队共享配置,并在可预测和可重现的环境中测试你的项目。如果你正在开发软件,那么通过使用 Vagrant 进行测试,你将为你的用户提供很好的服务。如果你没有开发软件,但你喜欢尝试新版本的操作系统,那么没有比这更容易的方法了。今天就尝试 Vagrant!


本文最初发表于 作者的个人博客,并已获得许可进行改编。

接下来阅读什么
标签
https://ayushsharma.in
我是一名作家和 AWS 解决方案架构师。我与初创公司和企业合作进行软件工程、DevOps、SRE 和云架构。我在 https://ayushsharma.in 上写下我的经验。

评论已关闭。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.