Linux中國

使用 Vagrant 在不同的操作系統上測試你的腳本

我使用 Vagrant 已經很長時間了。我使用幾種 DevOps 工具,把它們全安裝在一個系統上會搞得很亂。Vagrant 可以讓你在不破壞系統的情況下隨意折騰,因為你根本不需要在生產系統上做實驗。

如果你熟悉 VirtualBoxGNOME Boxes,那麼學習 Vagrant 很容易。Vagrant 有一個簡單而乾淨的界面用於管理虛擬機。一個名為 Vagrantfile 的配置文件,允許你定製你的虛擬機(稱為 「Vagrant 盒子 box 」)。一個簡單的命令行界面讓你啟動、停止、暫停或銷毀你的「盒子」。

考慮一下這個簡單的例子。

假設你想寫 Ansible 或 shell 腳本,在一個新的伺服器上安裝 Nginx。你不能在你自己的系統上這樣做,因為你運行的可能不是你想測試的操作系統,或者沒有所有的依賴項。啟動新的雲伺服器進行測試可能會很費時和昂貴。這就是 Vagrant 派上用處的地方。你可以用它來啟動一個虛擬機,用你的腳本來 配備 provision 它,並證明一切按預期工作。然後,你可以刪除這個「盒子」,重新配備它,並重新運行你的腳本來驗證它。你可以多次重複這個過程,直到你確信你的腳本在所有條件下都能工作。你可以將你的 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

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國