使用 Vagrant 在不同的操作系統(tǒng)上測(cè)試你的腳本
Vagrant 可以幫助你在你的電腦上運(yùn)行其他操作系統(tǒng),這意味著你可以構(gòu)建、測(cè)試、瘋狂折騰而不毀壞你的系統(tǒng)。
我使用 Vagrant 已經(jīng)很長(zhǎng)時(shí)間了。我使用幾種 DevOps 工具,把它們?nèi)惭b在一個(gè)系統(tǒng)上會(huì)搞得很亂。Vagrant 可以讓你在不破壞系統(tǒng)的情況下隨意折騰,因?yàn)槟愀静恍枰谏a(chǎn)系統(tǒng)上做實(shí)驗(yàn)。
如果你熟悉 VirtualBox 或 GNOME Boxes,那么學(xué)習(xí) Vagrant 很容易。Vagrant 有一個(gè)簡(jiǎn)單而干凈的界面用于管理虛擬機(jī)。一個(gè)名為 Vagrantfile
的配置文件,允許你定制你的虛擬機(jī)(稱(chēng)為 “Vagrant 盒子”)。一個(gè)簡(jiǎn)單的命令行界面讓你啟動(dòng)、停止、暫停或銷(xiāo)毀你的“盒子”。
考慮一下這個(gè)簡(jiǎn)單的例子。
假設(shè)你想寫(xiě) Ansible 或 shell 腳本,在一個(gè)新的服務(wù)器上安裝 Nginx。你不能在你自己的系統(tǒng)上這樣做,因?yàn)槟氵\(yùn)行的可能不是你想測(cè)試的操作系統(tǒng),或者沒(méi)有所有的依賴(lài)項(xiàng)。啟動(dòng)新的云服務(wù)器進(jìn)行測(cè)試可能會(huì)很費(fèi)時(shí)和昂貴。這就是 Vagrant 派上用處的地方。你可以用它來(lái)啟動(dòng)一個(gè)虛擬機(jī),用你的腳本來(lái)配備它,并證明一切按預(yù)期工作。然后,你可以刪除這個(gè)“盒子”,重新配備它,并重新運(yùn)行你的腳本來(lái)驗(yàn)證它。你可以多次重復(fù)這個(gè)過(guò)程,直到你確信你的腳本在所有條件下都能工作。你可以將你的 Vagrantfile 提交給 Git,以確保你的團(tuán)隊(duì)正在測(cè)試完全相同的環(huán)境(因?yàn)樗麄儗⑹褂猛耆嗤臏y(cè)試機(jī))。不會(huì)再有“但它在我的機(jī)器上運(yùn)行良好!”這事了。
開(kāi)始使用
首先,在你的系統(tǒng)上安裝 Vagrant,然后創(chuàng)建一個(gè)新的文件夾進(jìn)行實(shí)驗(yàn)。在這個(gè)新文件夾中,創(chuàng)建一個(gè)名為 Vagrantfile
的新文件,內(nèi)容如下:
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/hirsute64"
end
你也可以運(yùn)行 vagrant init ubuntu/hirsute64
,它將為你生成一個(gè)新的 Vagrant 文件?,F(xiàn)在運(yùn)行 vagrant up
。這個(gè)命令將從 Vagrant 倉(cāng)庫(kù)中下載 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!
此時(shí),如果你打開(kāi)你的 Vagrant 后端(如 VirtualBox 或 virt-manager),你會(huì)看到你的“盒子”已經(jīng)有了。接下來(lái),運(yùn)行 vagrant ssh
登錄到“盒子”。如果你能看到 Vagrant 的提示符,那么你就進(jìn)入了!
~ 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 使用“基礎(chǔ)盒子”來(lái)建立你的本地機(jī)器。在我們的例子中,Vagrant 從 Hashicorp 的 Vagrant 目錄下載 ubuntu/hirsuite64
鏡像,并插入 VirtualBox 來(lái)創(chuàng)建實(shí)際的“盒子”。
共享文件夾
Vagrant 將你的當(dāng)前文件夾映射到 Vagrant “盒子”中的 /vagrant
。這允許你在你的系統(tǒng)和“盒子”里保持文件同步。這很適合測(cè)試 Nginx 網(wǎng)站,通過(guò)將你的文件根目錄指向 /vagrant
。你可以使用 IDE 進(jìn)行修改,“盒子”里的 Nginx 會(huì)提供這些修改。
Vagrant 命令
有幾個(gè) Vagrant 命令,你可以用它們來(lái)控制你的“盒子”。
其中一些重要的命令是:
vagrant up
:?jiǎn)?dòng)一個(gè)“盒子”。vagrant status
:顯示當(dāng)前“盒子”的狀態(tài)。vagrant suspend
:暫停當(dāng)前的“盒子”。vagrant resume
:恢復(fù)當(dāng)前的“盒子”。vagrant halt
:關(guān)閉當(dāng)前的“盒子”。vagrant destroy
:銷(xiāo)毀當(dāng)前的“盒子”。通過(guò)運(yùn)行此命令,你將失去存儲(chǔ)在“盒子”上的任何數(shù)據(jù)。vagrant snapshot
:對(duì)當(dāng)前的“盒子”進(jìn)行快照。
試試 Vagrant
Vagrant 是一個(gè)使用 DevOps 原則進(jìn)行虛擬機(jī)管理的工具,久經(jīng)時(shí)間考驗(yàn)。配置你的測(cè)試機(jī),與你的團(tuán)隊(duì)分享配置,并在一個(gè)可預(yù)測(cè)和可重復(fù)的環(huán)境中測(cè)試你的項(xiàng)目。如果你正在開(kāi)發(fā)軟件,那么通過(guò)使用 Vagrant 進(jìn)行測(cè)試,你將為你的用戶(hù)提供良好的服務(wù)。如果你不開(kāi)發(fā)軟件,但你喜歡嘗試新版本的操作系統(tǒng),那么沒(méi)有比這更簡(jiǎn)單的方法了。今天就試試 Vagrant 吧!