作者 | Carl Chenet
譯者 | DarkSun (lujun9972) ? ? ? ? 共計翻譯:77 篇 貢獻時間:123 天
我使用 Ansible 來自動部署站點 (LinuxJobs.fr[1]、Journal du hacker[2]) 與應用 (Feed2toot[3]、Feed2tweet[4])。在本文中將會講述我是如何配置以實現在本地測試 Ansbile 劇本的。
ansible
為何要測試 Ansible 劇本
我需要一種簡單而迅速的方法來在我的本地筆記本上測試 Ansible 劇本的部署情況,尤其在剛開始寫一個新劇本的時候,因為直接部署到生產伺服器上不僅特別慢而且風險還很大。
我使用 Vagrant[5] 來將劇本部署到 VirtualBox[6] 虛擬機器上而不是部署到遠端伺服器。這使得修改的結果很快就能看到,以實現快速迭代和修正。
責任宣告:我並不是專業程式員。我只是描述一種我覺得適合我的,即簡單又有效的用來測試 Ansible 劇本的解決方案,但可能還有其他更好的方法。
我的流程
你需要哪些東西
首先,你需要 Virtualbox。若你使用的是 Debian[7] 發行版,這個連結[8] 描述了安裝的方法,可以從 Debian 倉庫中安裝,也可以透過官網來安裝。
其次,你需要 Vagrant。為什麼要 Vagrant?因為它是介於開發環境和虛擬機器之間的中介軟體,它允許透過程式設計的方式重覆操作,而且可以很方便地將你的部署環境與虛擬機器連線起來。透過下麵命令可以安裝 Vagrant:
# apt install vagrant
設定 Vagrant
Vagrant 的一切資訊都存放在 Vagrantfile
檔案中。這是我的內容:
Vagrant.require_version ">= 2.0.0"
Vagrant.configure(1) do |config|
config.vm.box = "debian/stretch64"
config.vm.provision "shell", inline: "apt install --yes git python3-pip"
config.vm.provision "ansible" do |ansible|
ansible.verbose = "v"
ansible.playbook = "site.yml"
ansible.vault_password_file = "vault_password_file"
end
end
Vagrantfile
。1
)。apt
安裝 git
和 python3-pip
。當 Vagrant 啟動 Ansible 時,類似於執行這樣的操作:
$ ansible-playbook --inventory-file=/home/me/ansible/test-ansible-playbook/.vagrant/provisioners/ansible/inventory -v --vault-password-file=vault_password_file site.yml
執行 Vagrant
寫好 Vagrantfile
後,就可以啟動虛擬機器了。只需要簡單地執行下麵命令:
$ vagrant up
這個操作會很慢,因為它會啟動虛擬機器,安裝 Vagrantfile
中定義的附加軟體,最終應用你的劇本。你不要太頻繁地使用這條命令。
Ok,現在你可以快速迭代了。在做出修改後,可以透過下麵命令來快速測試你的部署:
$ vagrant provision
Ansible 劇本搞定後,通常要經過多次迭代(至少我是這樣的),你應該一個全新安裝的虛擬機器上再測試一次,因為你在迭代的過程中可能會對虛擬機器造成修改從而引發意料之外的結果。
使用下麵命令進行全新測試:
$ vagrant destroy && vagrant up
這又是一個很慢的操作。你應該在 Ansible 劇本差不多完成了的情況下才這樣做。在全新虛擬機器上測試部署之後,就可以釋出到生產上去了。至少準備要充分不少了吧 :p
有什麼改進意見?請告訴我
本文中描述的配置對我自己來說很有用。我可以做到快速迭代(尤其在編寫新的劇本的時候),除了劇本外,對我的最新應用,尚未準備好部署到生產環境上的應用也很有幫助。直接部署到遠端伺服器上對我的生產服務來說不僅緩慢而且很危險。
我本也可以使用持續整合(CI)伺服器,但這不是本文的主題。如前所述,本文的目的是在編寫新的 Ansible 劇本之初盡可能的快速迭代。
在編寫 Ansible 劇本之初就提交,推送到你的 Git 倉庫然後等待 CI 測試的執行結果,這有點太過了,因為這個時期的錯誤總是很多,你需要一一個地去除錯。我覺得 CI 在編寫 Ansible 劇本的後期會有用的多,尤其當多個人同時對它進行修改而且你有一整套程式碼質量規範要遵守的時候。不過,這隻是我自己的觀念,還有待討論,再重申一遍,我不是個專業的程式員。
如果你有更好的測試 Ansible 劇本的方案或者能對這裡描述的方法做出一些改進,請告訴我。你可以把它寫到留言框中或者透過社交網路聯絡我,我會很高興的。
via: https://carlchenet.com/testing-ansible-playbooks-with-vagrant/
作者:Carl Chenet[10] 譯者:lujun9972 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出