使用vagrant+jenkins來管理虛擬機的技巧

簡介

虛擬機有很多好處,不僅僅節省硬件資源,而且還可以快速切換系統環境,顯然會在軟件開發中起到極大作用。

在《持續交付》第十一章(11.7.1)中就提到了虛擬機環境的管理。如下圖通過虛擬機創建虛擬環境

它描述的是在你的持續集成的Jenkins CI服務器(以下簡稱jenkins)中,需要各種服務器來測試一個應用。我們可以快速的從虛擬機的VMM模板庫中,啓動需要的各種類型虛擬機,而不是每個都重新安裝(省時),完成測試,產生報告後,也快速消失(省錢)。

讓我們一起來看看一種漂亮的實現方案vagrant+jenkins實現技巧。

基本知識

vagrant

不同的虛擬機技術(virtualbox,vmware,xen/kvm等等)可能用不同的方法管理,vagrant是virtualbox的前端,它簡化了virtualbox虛擬機的操作,而且增加了對自動化(provisioning)的puppet/chef的支持,這裏就不詳細介紹。vagrant的入門介紹已經很詳細了,有一篇博客也可以借鑑一下。

你要知道的就是下面的幾個命令

$ cd ubuntu1104-vm # 進入已有的 ubuntu 11.04 虛擬機目錄
$ vagrant up # 啓動 ubuntu 虛擬機
$ vagrant ssh -c "pwd"
/home/vagrant
$ vagrant halt # 停止虛擬機

jenkins CI

jenkins 是一個最常用的持續集成服務器,可單獨運行或者放在Web服務器中運行。

直接啓動一個任務(jenkins job)去調用vagrant操作虛擬機不是一個很好的方式,因爲啓動jenkins的用戶(如tomcat)的權限都比較小,以防止任務誤操作。

幸好jenkins有個超級棒的主從模式(master/slave)來解決。

方案搭建

建立vagrant用戶

最好先在一個機器上(可以和jenkins主機不在一起)創建一個vagrant用戶,建立一套vagrant的用戶環境。

因爲無密碼訪問,所以要配好ssh環境,我們可以重用vagrant虛擬機的公私密鑰,如下面的 IdentityFile就是私鑰。

vagrant@host:~/vm/ubuntu1104$ vagrant ssh_config
Host default
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /var/lib/gems/1.8/gems/vagrant-0.8.7/keys/vagrant
  IdentitiesOnly yes

把公私密鑰拷到vagrant用戶的.ssh目錄下。

vagrant@host:~$ mkdir .ssh 
vagrant@host:~$ cp /var/lib/gems/1.8/gems/vagrant-0.8.7/keys/vagrant .ssh/id_rsa
vagrant@host:~$ chmod 600 .ssh/id_rsa
vagrant@host:~$ cat /var/lib/gems/1.8/gems/vagrant-0.8.7/keys/vagrant.pub >> .ssh/authorized_keys

jenkins slave設置

然後到jenkins主機的 系統管理->管理節點->新建節點 來增加vagrant虛擬機節點,如下圖。

配置jenkins虛擬機節點

例子中,vagrant節點和jenkins主機在一臺機器上,所以是localhost,配好了私有密鑰,並且設置標籤爲vagrant-vm

jenkins 任務設置

現在可以設置新的任務了,選定自由風格(freestyle),如下圖

配置jenkins任務

限定它去vagrant-vm去執行,到時它就會觸發jenkins從機(slave)的啓動。

配置jenkins任務

然後設置一個構建內容,就是啓動虛擬機,執行命令(真實情況會用puppet安裝,並進行測試)。

最後就可以讓它跑起來。

總結

這篇文章主要簡單講了一下在jenkins中管理虛擬機的一種方案,自動化的安裝puppet並沒提到,可自己嘗試。另外vagrant創立虛擬機也沒有談到,一般可以用veewee這個軟件來完成,有空下次講。

參考

  1. larry的英文博客:http://codeslife.com/2011/10/21/make-ci-easier-with-jenkins-ci-and-vagrant/
  2. stackoverflow的問題討論:How to combine Vagrant with Jenkins for the perfect Continuous Integration Environment?

轉載自持續交付

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章