持續內建概述
什麼是持續內建
随着軟體開發複雜度的不斷提高,團隊開發成員間如何更好的協同工作以確定軟體開發的品質已經慢慢成為開發過程中不可回避的問題。尤其是近年來
靈活開發在軟體領域越來越火,如何能再不間斷變化的需求中快熟适應和保證軟體的品質顯得尤其的重要.
持續內建正式針對這一類問題的一種軟體開發實踐。它倡導團隊開發成員必須經常內建他們的工作,甚至每天都可能發生多次內建。而每次的內建都是
通過自動化的建構來驗證,包括自動編譯、釋出和測試,進而盡快的發現內建錯誤,讓團隊能更快的開發内聚的軟體。
持續內建的核心價值在于:
1、持續內建中的任何一個環節都是自動完成的,無需太多人工幹預,有利于減少重複過程以節省時間、費用和工作量;
2、持續內建保障每個時間點上團隊成員送出的代碼是能成功內建的。換言之,任何時間點都能第一時間發現軟體的內建問題,使任意時間釋出可部署
軟體成為可能;
3、持續內建還能利于軟體本身的發展趨勢,這點在需求不明确或是頻繁性變更的情景中尤其重要,持續內建的品質能夠幫助團隊進行有效決策,同時
履歷團隊對開發産品的信心。
持續內建的原則
業界普遍認同的持續內建的原則包括:
1、需要版本控制軟體保障團隊成員送出的代碼不會導緻內建失敗。常用的版本控制軟體有cvs,subversion,git,sourcesafe等;
2、開發人員須及時向版本控制庫中送出代碼,也需經常性的從版本控制庫中更新代碼到本地;
3、需要有專門的內建伺服器來執行內建建構。根據項目的具體實際,內建建構可以被軟體的修改來直接觸發,也可以定時啟動,
如每半小時建構一次;
4、必須保證建構的成功。如果建構失敗,修複建構過程中的錯誤是優先級最高的工作。一旦修複,需手動啟動一次建構。
持續內建系統的組成
由此可見,一個完整的建構系統必須包括:
1、一個自動建構過程,包括自動編譯、分發、部署和測試等。
2、一個代碼庫,即需要版本控制軟體來保障代碼的可維護性,同時作為建構過程的素材庫。
3、一個持續內建伺服器。即将介紹的jenkins就是一個配置簡單和使用友善的持續內建伺服器。
Jenkins 簡介
Jenkins是一個開源項目,提供了一種易于使用的持續內建系統,使開發者從繁雜的內建中解脫出來,專注于更重要的業務邏輯實作上。同時Jenkins能
實施監控內建中存在的錯誤,提供詳細的日志檔案和提醒功能,還能用圖表的形式形象的展示項目建構的趨勢和穩定性。下面将介紹Jenkins的基本功能。
Jenkins的安裝非常簡單
伺服器環境: Ubuntu 12.04.1 LTS
安裝jenkins
1
2
3
4
<code>wget -q -O - http:</code><code>//pkg</code><code>.jenkins-ci.org</code><code>/debian/jenkins-ci</code><code>.org.key | </code><code>sudo</code> <code>apt-key add -</code>
<code>sudo</code> <code>sh -c </code><code>'echo deb http://pkg.jenkins-ci.org/debian binary/ > /etc/apt/sources.list.d/jenkins.list'</code>
<code>sudo</code> <code>apt-get update</code>
<code>sudo</code> <code>apt-get </code><code>install</code> <code>jenkins</code>
啟動停止jenkins
<code>sudo</code> <code>/etc/init</code><code>.d</code><code>/jenkins</code> <code>start</code>
<code>sudo</code> <code>/etc/init</code><code>.d</code><code>/jenkins</code> <code>stop</code>
Jenkins home: /var/lib/jenkins
log路徑/var/log/jenkins/jenkins.log
<a target="_blank" href="http://blog.51cto.com/attachment/201312/152151169.jpg"></a>
可以看到Jenkins預設使用的是:8080端口
啟動Jenkins後,我們看到一個背景程序在指令行模式下運作。此時在浏覽器位址欄中打開 http://serverip:8080 就可以看到Jenkins的頁面了
Jenkins的可貴之處在于具有非常搞的可用性,從它的界面中能輕松地完成各種配置,更多的配置和使用資訊,可以在Jenkins的官方網站上查詢。
Jenkins的主界面是:
<a target="_blank" href="http://blog.51cto.com/attachment/201312/153121547.jpg"></a>
Jenkins提供了非常豐富的插件支援,使得Jenkins變得越來越強大。我們可以友善的安裝各種第三方插件,進而友善快捷的內建第三方的應用。
比如Jenkins提供了對于IBM Rational ClearCase的插件支援。
試試看,你就會發現Jenkins非常好用上手。
<a target="_blank" href="http://blog.51cto.com/attachment/201312/155120251.jpg"></a>
基于Jenkins快速搭建持續內建環境
正如前面所述,一個持續內建環境需要包括三個方面的要素:代碼庫、建構過程和持續內建伺服器。對于Jenkins有初步了解後,我們通過一個執行個體來集中
展示如何快速搭建一個簡單的基于Jenkins的持續內建環境。
我們使用Git作為版本控制庫,Jenkins預設情況下是沒有安裝Git的.我們需要到插件管理界面中選中Git,然後點選安裝重新啟動來激活這個插件。安裝成功
後,可以在已安裝頁籤上看到以下資訊。
<a target="_blank" href="http://blog.51cto.com/attachment/201312/170254208.jpg"></a>
接下來,我們開始建立一個Jenkins項目,我們選擇 "建構一個自由風格的軟體項目"
如何配置這個選項。
我的Git代碼庫位址是:/home/jenkins/api.git
<a target="_blank" href="http://blog.51cto.com/attachment/201312/171703107.jpg"></a>
根據開發需要,設定分鐘我們需要建構一次。選擇 Build periodically,在日程表中填寫 * * * * *
第一個參數代表的是分鐘 minute,取值 0~59;
第二個參數代表的是小時 hour,取值 0~23;
第三個參數代表的是天 day,取值 1~31;
第四個參數代表的是月 month,取值 1~12;
最後一個參數代表的是星期 week,取值 0~7,0 和 7 都是表示星期天。
是以 * * * * * 表示的就是每分鐘執行一次建構。
在"增加建構步驟"選擇 Execute Shell
<a target="_blank" href="http://blog.51cto.com/attachment/201312/172215181.jpg"></a>
選擇和配置其他的選項,比如郵件提醒,然後點選 save 儲存。
<a target="_blank" href="http://blog.51cto.com/attachment/201312/172419456.jpg"></a>
接下來每分鐘,jenkinsTest就會建構一次。我們可以在Jenkins中觀察建構進度和最終的狀态 成功或失敗。太陽表示之前的建構沒有任何失敗,
藍色的小球表示建構成功。
<a target="_blank" href="http://blog.51cto.com/attachment/201312/172953501.jpg"></a>
同時我們可以點選JenkinsTest檢視單詞建構的Console的輸出結果。從中我們可以看到建構的第一步是從git伺服器上checkout代碼然後調用我們配置的指令
<a target="_blank" href="http://blog.51cto.com/attachment/201312/173358573.jpg"></a>
<a target="_blank" href="http://blog.51cto.com/attachment/201312/173456411.jpg"></a>
我們可以看沒分鐘建構的清單。我們模拟一次建構失敗的情況,我們把git版本庫位址/home/jenkins/api.git的第一個"/"去掉後為:home/jenkins/api.git
再看建構過程會發生什麼...
<a target="_blank" href="http://blog.51cto.com/attachment/201312/174012491.jpg"></a>
JenkinsTest建構發生了錯誤.檢視詳細資訊如下:提示找不到版本庫
<a target="_blank" href="http://blog.51cto.com/attachment/201312/174155981.jpg"></a>
檢視一下郵件:
<a target="_blank" href="http://blog.51cto.com/attachment/201312/174346974.jpg"></a>
<a target="_blank" href="http://blog.51cto.com/attachment/201312/174507279.jpg"></a>
然後我們就可以在 Jenkins 中觀察建構的狀态了。一旦建構失敗我們能看到相應的警示圖示,同時,如果配置了郵件提醒,相關人員也會受到郵件。記住我們先前所提醒的那樣,
分析和處理建構的失敗是優先級最高的工作。接下來,我們還可以加入更多的 Jenkins 項目來實作自動化測試等功能,讓持續內建更友善有效地服務于項目開發。
本次分享到此結束,謝謝耐心觀看。
本文轉自birdinroom 51CTO部落格,原文連結:http://blog.51cto.com/birdinroom/1342897,如需轉載請自行聯系原作者