歡迎您光臨本站 註冊首頁

在 Linux KVM 上創建一個 ooRexx 構建環境

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  
使用 ooRexx 開發隨需應變的軟體構建服務,ooRexx 使用 Linux® 內核虛擬機(KVM)提升性能。KVM 充當客戶操作系統的主機,為用戶構建目標軟體。Apache Web 伺服器控制構建並存儲結果,供用戶在以後檢索結果。通過本文了解如何設置構建伺服器和創建客戶機,定製構建請求,以及組織和訪問構建結果。

最近,Open Object Rexx 項目(ooRexx;參見本文後面的 參考資料 了解更多信息)將其舊的隨需應變軟體構建系統從由 VMware 託管的客戶操作系統轉移到由 Linux Kernel Virtual Machine (KVM) 託管的客戶機上。這一改變提供了一個更加高效的構建環境,並且為用戶減少了構建時間。

ooRexx 軟體構建系統允許開發人員針對多個基於 x86 的平台和操作系統構建 ooRexx 軟體包。目前,受支持的客戶操作系統包括 Windows® XP (i386)、Fedora 10(i386 和 x86_64)和 Ubuntu 8.04(i386)。這些客戶操作系統為 Windows (EXE)、Fedora 和 openSUSE (RPM) 以及 Ubuntu (DEB) 生成 ooRexx 安裝和文檔包。其他基於 x86 的操作系統也將根據 ooRexx 開發人員和用戶的需求得到支持。

本文將展示如何創建自己的軟體構建系統,使用 ooRexx 開發團隊的設置作為例子,並為 ooRexx、Apache 和 Linux 開發人員提供了技巧和指導。您可以在本文結束部分 下載伺服器和客戶機腳本。該系統專門用於構建 ooRexx 軟體,但是其中的概念可以應用於通用的軟體構建系統。

本系統包括以下需求:

  • 需要一個 Web 介面來生成構建請求。
  • 需要一個 Web 介面來檢索構建結果。
  • 需要支持多客戶操作系統。
  • 客戶操作系統必須執行完全自動化的構建。
  • 在構建結束時,應當生成電子郵件併發送給請求用戶。

要滿足這些需求,開發團隊和我使用了一個四核的基於 Xeon 的伺服器。該伺服器包含 4GB 內存和 250GB 磁碟。我們選擇 Fedora 10 x86_64 發行版作為主操作系統,主要是考慮到該發行版使用的 KVM 具有良好的穩定性,並且是最新版本。選擇的硬體和軟體可能有所不同,但是主要的硬體標準是您的處理器應當具有硬體虛擬化特性 — 這是使用 KVM 的必要條件。

設置伺服器

設置構建伺服器的第一步是確定分區模式。我們決定將客戶操作系統的 Web 存儲和映像分離到單獨的分區中。我們為 Web 存儲分配 50GB 的硬碟,為客戶操作系統映像所在的 /var 分區分配 150GB 硬碟。其餘硬碟空間被分配給 /home 分區和 /root 分區。

構建系統的一般需求

構建系統包含以下一些基本需求:

  • 頻繁構建以儘早發現問題
  • 加快構建(速度越快,所做的越多)
  • 增量式構建處理(或構建避免)來反映較小的開發更新
  • 支持(至少在較低級別)管理源代碼依賴關係,以儘可能地保持系統靈活性
  • 關於構建、編譯和鏈接的提取/報告功能
  • 跟蹤源代碼和二進位文件匹配的報告系統(有效地比較新舊代碼)
  • 報告有關構建狀態或測試結果(成功或失敗)的功能
  • 創建發行說明和系統文檔的功能

接下來,我們將使用 Fedora 10 x86_64 發行版安裝主操作系統。如果您要設置自己的系統,那麼執行下面的操作可以避免很多麻煩:

  • 在啟動安裝之前通過機器的 BIOS 啟用硬體虛擬化功能,這樣 Fedora 將發現 KVM 是可用的。
  • 執行軟體組件的定製安裝,這樣就可以選擇 Fedora 虛擬化選項。

安裝好伺服器操作系統后,我們將它配置為可由客戶操作系統訪問。這包括對 Windows 客戶機啟用 Samba,以及對 Linux 客戶機啟用 NFS。這可以支持客戶機訪問構建結果分區,從而可以存儲構建文件以供用戶訪問。主要 Samba 共享和主要 NFS 導出針對所有客戶機都指向同一位置。

接下來,我們將配置 Apache Web 伺服器以提供對構建請求系統(我將在 構建請求 中加以解釋)和構建結果庫的訪問。

需要確定的一項配置決策與客戶機的網路選項有關。默認安裝被配置為對所有客戶機應用一個私有的內部網。C 類網和 DHCP 伺服器一起提供,來為客戶機提供 IP 地址。另一個選擇是設置系統,以將其中一個網路設備作為通向伺服器外部網的網橋。這需要進行手動配置。您可以在 libvirt Wiki 中找到如何為伺服器配置這一選項的示例(見 參考資料 中的鏈接)。





創建客戶機

有兩種方法可以為 KVM 創建客戶機。對於第一種方法,只需要創建所需的客戶機來滿足需求。第二種方法採取更加長遠的方式創建客戶機。我們使用第二種方法創建客戶機,並且如果具有必需的資源的話,那麼推薦以該方法作為標準方法。

我們首先根據需求確定客戶機的數量和類型。我們需要操作系統來為這些環境創建軟體構建,並使用另一個操作系統創建文檔。結果證明,在我們的例子當中,文檔和 i386 RPM 任務可以被結合起來並由一個客戶機處理。下面是所分配的客戶機和任務:

  • Windows XP (i386):構建 Windows 安裝可執行文件。
  • Fedora 10 (i386):構建 i386 RPM 文件和文檔 ZIP 文件。
  • Fedora 10 (x86_64):構建 x86_64 RPM 文件。
  • Ubuntu 8.04 (i386):構建 DEB 文件。

我們採用的方法以映像的形式創建前面提到的客戶機,這些映像稍後可以進行克隆。因此,每個客戶機都擁有一個基本版本,可以在稍後克隆,定製后的克隆版本將執行實際的構建任務。

克隆 KVM 客戶機非常簡單。Fedora 10 提供的 virt-clone 腳本可以完全自動化這個任務。


清單 1. Fedora 10 的 virt-clone 腳本
				  $ virt-clone --original=Fedora10-i386-Base \               --name=Fedora10-i386-Build    \               --file=/var/lib/libvirt/images/Fedora10-i386-Build.img  

original 選項指定客戶操作系統的名稱,因為它對於虛擬機管理器是已知的。name 選項指定新的客戶機的名稱。file 選項指定客戶機的新映像文件的文件名。這將完全克隆一個已有客戶機並將其複製到一個新的客戶機版本。它還將修改新客戶機的 MAC 地址和 UUID。因此,如果必要的話,將保存原始的客戶機以供以後進行克隆,並且為您的定製提供一個新的客戶機版本。

有關 virt-clone 腳本需要注意的一點是:如果原始客戶機有一個未被連接的設備,比如 CD-ROM,那麼腳本將失敗。在對客戶機進行克隆之前,必須刪除所有未連接的設備。如果必要的話,可以在克隆完成後將它們重新添加到客戶機中。

一旦創建好基本的構建客戶機,那麼將針對構建任務對每個客戶機進行定製。此時,Windows XP 客戶機是最具有挑戰性的,因為 Visual C++ 編譯器和 Software Development Kit 需要作為定製的一部分安裝。除了在 Ubuntu 客戶機上安裝 NFS 之外,Linux 客戶機基本上不需要定製。





構建請求

所有構建客戶機需要進行一項額外的定製:Open Object Rexx 版本 3.2 必須安裝在每一個客戶機上。為什麼?因為使用 ooRexx 編寫的腳本控制每個客戶機上的請求和構建過程。該腳本訪問構建機器伺服器上的 TCP/IP 埠,以搜索構建請求。如果找到某個請求,那麼構建過程將被調用,並將創建一組安裝文件(RPM、DEB、EXE)以及一個構建報告,並且這些內容被存儲到構建機器伺服器上,供用戶通過 HTTP 訪問。

ooRexx 構建請求腳本具有足夠的智慧,它不會複製軟體的已有構建版本。它還通過電子郵件通知用戶構建已經完成,並提供一個 URL 指向構建機器伺服器上存儲構建的位置。

構建請求在構建機器伺服器上通過 CGI 腳本生成。用戶訪問一個 HTTP Web 頁面並請求一個針對他們所選的操作系統的構建。Apache 伺服器隨後調用 CGI 腳本,後者將請求放到一個隊列中。構建客戶機隨後負責訪問這些請求並執行所請求的操作。構建結果也可以通過 Web 站點下載獲得。

如前所述,伺服器和 build guest 客戶機的代碼可從下面 下載 獲得。所有腳本都使用 ooRexx 編寫,應當很容易執行。包含的文件包括:

  • buildserver.rex:該腳本運行在 Web 伺服器上並維護客戶操作系統用於查找工作的隊列。
  • buildd.rex:該腳本運行在每個客戶操作系統上並訪問 Web 伺服器上的隊列來查找工作。每個客戶機只具有一個隊列,因此將只構建一種輸出文件。
  • simq.cls:這個文件並不屬於腳本,但是是由 buildserver.rex 腳本使用的類文件。
  • socket.cls:這個類文件由 buildd.rex 腳本使用。
  • streamsocket.cls:這個類文件也由 buildd.rex 腳本使用。




構建結果

構建結果由構建客戶機放到 Web 站點中。構建進行了組織,因此每個 Subversion 修訂具有自己的子目錄,包含針對這個修訂的所有平台客戶機構建。同樣,每個平台客戶機生成一個構建報告,也存儲在修訂子目錄中。

構建報告對於所有內容的正常工作是必不可少的。如果在構建期間出現一個錯誤,並且最終的輸出文件並沒有生成,那麼用戶必須通過某種方式來找到錯誤。因此,每個客戶機上的構建過程將始終生成一個構建報告,並將其存儲到構建庫中。


[火星人 ] 在 Linux KVM 上創建一個 ooRexx 構建環境已經有420次圍觀

http://coctec.com/docs/linux/show-post-68790.html