使用 Vagrant 在不同的操作系統上測試你的腳本
我使用 Vagrant 已經很長時間了。我使用幾種 DevOps 工具,把它們全安裝在一個系統上會搞得很亂。Vagrant 可以讓你在不破壞系統的情況下隨意折騰,因為你根本不需要在生產系統上做實驗。
如果你熟悉 VirtualBox 或 GNOME Boxes,那麼學習 Vagrant 很容易。Vagrant 有一個簡單而乾淨的界面用於管理虛擬機。一個名為 Vagrantfile
的配置文件,允許你定製你的虛擬機(稱為 「Vagrant 盒子 」)。一個簡單的命令行界面讓你啟動、停止、暫停或銷毀你的「盒子」。
考慮一下這個簡單的例子。
假設你想寫 Ansible 或 shell 腳本,在一個新的伺服器上安裝 Nginx。你不能在你自己的系統上這樣做,因為你運行的可能不是你想測試的操作系統,或者沒有所有的依賴項。啟動新的雲伺服器進行測試可能會很費時和昂貴。這就是 Vagrant 派上用處的地方。你可以用它來啟動一個虛擬機,用你的腳本來 配備 它,並證明一切按預期工作。然後,你可以刪除這個「盒子」,重新配備它,並重新運行你的腳本來驗證它。你可以多次重複這個過程,直到你確信你的腳本在所有條件下都能工作。你可以將你的 Vagrantfile 提交給 Git,以確保你的團隊正在測試完全相同的環境(因為他們將使用完全相同的測試機)。不會再有「但它在我的機器上運行良好!」這事了。
開始使用
首先,在你的系統上安裝 Vagrant,然後創建一個新的文件夾進行實驗。在這個新文件夾中,創建一個名為 Vagrantfile
的新文件,內容如下:
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/hirsute64"
end
你也可以運行 vagrant init ubuntu/hirsute64
,它將為你生成一個新的 Vagrant 文件。現在運行 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),你會看到你的「盒子」已經有了。接下來,運行 vagrant ssh
登錄到「盒子」。如果你能看到 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 使用「基礎盒子」來建立你的本地機器。在我們的例子中,Vagrant 從 Hashicorp 的 Vagrant 目錄下載 ubuntu/hirsuite64
鏡像,並插入 VirtualBox 來創建實際的「盒子」。
共享文件夾
Vagrant 將你的當前文件夾映射到 Vagrant 「盒子」中的 /vagrant
。這允許你在你的系統和「盒子」里保持文件同步。這很適合測試 Nginx 網站,通過將你的文件根目錄指向 /vagrant
。你可以使用 IDE 進行修改,「盒子」里的 Nginx 會提供這些修改。
Vagrant 命令
有幾個 Vagrant 命令,你可以用它們來控制你的「盒子」。
其中一些重要的命令是:
vagrant up
:啟動一個「盒子」。vagrant status
:顯示當前「盒子」的狀態。vagrant suspend
:暫停當前的「盒子」。vagrant resume
:恢復當前的「盒子」。vagrant halt
:關閉當前的「盒子」。vagrant destroy
:銷毀當前的「盒子」。通過運行此命令,你將失去存儲在「盒子」上的任何數據。vagrant snapshot
:對當前的「盒子」進行快照。
試試 Vagrant
Vagrant 是一個使用 DevOps 原則進行虛擬機管理的工具,久經時間考驗。配置你的測試機,與你的團隊分享配置,並在一個可預測和可重複的環境中測試你的項目。如果你正在開發軟體,那麼通過使用 Vagrant 進行測試,你將為你的用戶提供良好的服務。如果你不開發軟體,但你喜歡嘗試新版本的操作系統,那麼沒有比這更簡單的方法了。今天就試試 Vagrant 吧!
這篇文章最初發表在 作者的個人博客 上,經許可後被改編。
via: https://opensource.com/article/21/9/test-vagrant
作者:Ayush Sharma 選題:lujun9972 譯者:geekpi 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive