天天看點

基于 Jenkins 快速搭建持續內建環境

持續內建是一種軟體開發實踐,對于提高軟體開發效率并保障軟體開發品質提供了理論基礎。Jenkins 是一個開源軟體項目,旨在提供一個開放易用的軟體平台,使持續內建變成可能。本文正是從持續內建的基本概念入手,通過具體執行個體,介紹了如何基于 Jenkins 快速搭建持續內建環境。

随着軟體開發複雜度的不斷提高,團隊開發成員間如何更好地協同工作以確定軟體開發的品質已經慢慢成為開發過程中不可回避的問題。尤其是近些年來,靈活(Agile) 在軟體工程領域越來越紅火,如何能再不斷變化的需求中快速适應和保證軟體的品質也顯得尤其的重要。

持續內建正是針對這一類問題的一種軟體開發實踐。它倡導團隊開發成員必須經常內建他們的工作,甚至每天都可能發生多次內建。而每次的內建都是通過自動化的建構來驗證,包括自動編譯、釋出和測試,進而盡快地發現內建錯誤,讓團隊能夠更快的開發内聚的軟體。

持續內建的核心價值在于:

持續內建中的任何一個環節都是自動完成的,無需太多的人工幹預,有利于減少重複過程以節省時間、費用和工作量;

持續內建保障了每個時間點上團隊成員送出的代碼是能成功內建的。換言之,任何時間點都能第一時間發現軟體的內建問題,使任意時間釋出可部署的軟體成為了可能;

持續內建還能利于軟體本身的發展趨勢,這點在需求不明确或是頻繁性變更的情景中尤其重要,持續內建的品質能幫助團隊進行有效決策,同時建立團隊對開發産品的信心。

業界普遍認同的持續內建的原則包括:

1)需要版本控制軟體保障團隊成員送出的代碼不會導緻內建失敗。常用的版本控制軟體有 IBM Rational ClearCase、CVS、Subversion 等;

2)開發人員必須及時向版本控制庫中送出代碼,也必須經常性地從版本控制庫中更新代碼到本地;

3)需要有專門的內建伺服器來執行內建建構。根據項目的具體實際,內建建構可以被軟體的修改來直接觸發,也可以定時啟動,如每半個小時建構一次;

4)必須保證建構的成功。如果建構失敗,修複建構過程中的錯誤是優先級最高的工作。一旦修複,需要手動啟動一次建構。

由此可見,一個完整的建構系統必須包括:

一個自動建構過程,包括自動編譯、分發、部署和測試等。

一個代碼存儲庫,即需要版本控制軟體來保障代碼的可維護性,同時作為建構過程的素材庫。

一個持續內建伺服器。本文中介紹的 Jenkins 就是一個配置簡單和使用友善的持續內建伺服器。

Jenkins 是一個開源項目,提供了一種易于使用的持續內建系統,使開發者從繁雜的內建中解脫出來,專注于更為重要的業務邏輯實作上。同時 Jenkins 能實施監控內建中存在的錯誤,提供詳細的日志檔案和提醒功能,還能用圖表的形式形象地展示項目建構的趨勢和穩定性。下面将介紹 Jenkins 的基本功能。

Jenkins 的安裝非常簡單,隻需要從 Jenkins 的首頁上下載下傳最新的 jenkins.war 檔案然後運作 java -jar jenkins.war。同時,還可以點選 Jenkins 頁面上的 launch 按鈕完成下載下傳和運作 Jenkins。

啟動 Jenkins 後,會有一個背景程序在指令行模式下運作。此時在浏覽器位址欄中打開 http://localhost:8080 就可以看到 Jenkins 的頁面了。Jenkins 的可貴之處在于具有非常高的可用性,從它的界面中能很輕松地完成各種配置,更多的配置和使用資訊,可以在 Jenkins 的官方網站上查詢。

非常有趣的是,Jenkins 還提供了非常豐富的插件支援,這使得 Jenkins 變得越來越強大。我們可以友善的安裝各種第三方插件,進而友善快捷的內建第三方的應用。比如 Jenkins 提供了對于 IBM Rational ClearCase 的插件支援。

此外,Jenkins 提供了豐富的管理和配置的功能,包括系統配置、管理插件、檢視系統資訊、系統日志、節點管理、Jenkins 指令行視窗、資訊統計等功能。試試看,您就會發現 Jenkins 非常好上手使用。

回頁首

正如前文中所描述的那樣,一個持續內建環境需要包括三個方面要素:代碼存儲庫、建構過程和持續內建伺服器。對 Jenkins 有了初步了解後,我們通過一個執行個體來集中展示如何快速搭建一個簡單的基于 Jenkins 的持續內建環境。

假設我們使用的代碼存儲庫是 IBM Rational ClearCase。Jenkins 提供了對 ClearCase 的插件支援,它能友善地讓我們連接配接到 Base ClearCase 或者 UCM ClearCase,使其成為 Jenkins Project 的代碼控制器。另外,這個插件是基于 cleartool 指令的,是以必須在 Jenkins 的持續內建伺服器上安裝 ClearCase 的用戶端程式。

在 Jenkins 的插件管理界面中選擇 ClearCase Plugin,點選頁面下方的 Install 按鈕。

在打開的頁面中提示安裝完成後,Jenkins 需要重新啟動來激活這個插件。重新執行 java -jar Jenkins.war 後,在 Jenkins 的頁面中,我們就能看到 ClearCase plugin 已經被安裝到 Jenkins 了。

類似 IBM Rational ClearCase,SVN(subversion)是目前比較流行的版本管理工具。很多開源軟體都是用 SVN 作為代碼版本管理軟體。為了讓執行個體更具有代表性,本文中我們使用 SVN 作為代碼存儲器。

接下來,我們開始建立一個 Jenkins 項目, 由于我們需要連接配接 SVN 的代碼存儲器, 我們選擇 Build a free-style software project。

然後我們就可以很友善的配置這個 JenkinsTest 項目了。Jenkins 很人性化的一點是在每個配置項的右側都有一個幫助的圖示,點選這個圖示,Jenkins 會告訴您如何配置這個配置項。

根據實際的 SVN 伺服器伺服器資訊配置 Source Code Management,這能讓 Jenkins 知道如何從哪裡擷取最新的代碼。本例中假設 Repository 就在本地。

根據開發需要,假設每一個小時我們需要重新建構一次。選擇 Build periodically,在 Schedule 中填寫 0 * * * *。

第一個參數代表的是分鐘 minute,取值 0~59;

第二個參數代表的是小時 hour,取值 0~23;

第三個參數代表的是天 day,取值 1~31;

第四個參數代表的是月 month,取值 1~12;

最後一個參數代表的是星期 week,取值 0~7,0 和 7 都是表示星期天。

是以 0 * * * * 表示的就是每個小時的第 0 分鐘執行一次建構。

接下來就是要添加 build 的步驟了。Jenkins 提供了四個選項供我們選擇,可以根據需要執行或調用外部指令和腳本。

在本例中,我們通過調用和執行 Windows batch command,将 SVN repository 中 Java 代碼編譯并生成 Jar 檔案。也可以根據項目的實際編寫自己的 shell 腳本配置在這裡。

選擇和配置其他的選項,比如郵件提醒,然後點選 save 儲存。

接下來的每小時的第 0 分鐘,JenkinsTest Job 就會被建構。我們可以在 Jenkins 中觀察建構的進度和最終的狀态——成功或者失敗。太陽代表之前的建構沒有任何失敗,藍色的小球代表建構成功。

同時我們可以點選 JenkinsTest 檢視單次建構的 Console 的輸出結果。從中我們能看到建構的第一步是從 SVN 伺服器上 check out 代碼,然後調用我們先前配置的 Windows batch command。

最後,我們可以看到 build 的最後結果 Success,表明本次建構成功。

接下來我們再次建立一個 Jenkins 的 Job,用于将生成的 build 分發到不同的節點上。這次 build triggers 我們選擇 Build after other projects are built,讓這個 Job 在 JenkinsTest 成功 build 後觸發。這樣一來就能達到我們自動 build 和自動分發的功能。

不同的是,這次我們選擇調用 Ant 腳本來完成分發的工作。隻需要将 Ant 腳本的 XML 的檔案配置在 Targets 中供 Jenkins 調用。

然後我們就可以在 Jenkins 中觀察建構的狀态了。一旦建構失敗我們能看到相應的警示圖示,同時,如果配置了郵件提醒,相關人員也會受到郵件。記住我們先前所提醒的那樣,分析和處理建構的失敗是優先級最高的工作。接下來,我們還可以加入更多的 Jenkins 項目來實作自動化測試等功能,讓持續內建更友善有效地服務于項目開發。

本文簡單介紹了持續內建的概念并着重介紹了如何基于 Jenkins 快速建構持續內建環境。通過具體執行個體的描述,相信讀者對 Jenkins 的基本功能和實作方法有個更清楚地認識和了解。其實,Jenkins 的功能遠不至文中所述的這些,Jenkins 還有詳盡的日志處理和持續內建建構狀态的分析等功能。希望在進一步的學習和應用中與大家分享。

整理:http://www.ibm.com/developerworks/cn/java/j-lo-jenkins/

上一篇: Myeclipse,tomcat
下一篇: Myeclipse技巧