隨着軟件開發複雜度的不斷提升,團隊開發成員間如何更好地協同工做以確保軟件開發的質量已經慢慢成爲開發過程當中不可迴避的問題。尤爲是近些年來,敏捷(Agile) 在軟件工程領域愈來愈紅火,如何能再不斷變化的需求中快速適應和保證軟件的質量也顯得尤爲的重要。java
持續集成正是針對這一類問題的一種軟件開發實踐。它倡導團隊開發成員必須常常集成他們的工做,甚至天天均可能發生屢次集成。而每次的集成都是經過自動化的構建來驗證,包括自動編譯、發佈和測試,從而儘快地發現集成錯誤,讓團隊可以更快的開發內聚的軟件。shell
持續集成的核心價值在於:編程
持續集成中的任何一個環節都是自動完成的,無需太多的人工干預,有利於減小重複過程以節省時間、費用和工做量;瀏覽器
持續集成保障了每一個時間點上團隊成員提交的代碼是能成功集成的。換言之,任什麼時候間點都能第一時間發現軟件的集成問題,使任意時間發佈可部署的軟件成爲了可能;服務器
持續集成還能利於軟件自己的發展趨勢,這點在需求不明確或是頻繁性變動的情景中尤爲重要,持續集成的質量能幫助團隊進行有效決策,同時創建團隊對開發產品的信心。svn
業界廣泛認同的持續集成的原則包括:工具
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 還有詳盡的日誌處理和持續集成構建狀態的分析等功能。但願在進一步的學習和應用中與你們分享。
查閱 Wikipedia,瞭解 持續集成的基本概念。
參考 Jenkins 官方網站首頁,下載 Jenkins 最新版本和了解 Jenkins 的使用。
developerWorks Rational 專區,學習關於 ClearCase 技術的相關文章,擴展 ClearCase 方面的技術。
Version Control with Subversion, 學習 SVN 相關的技術。
「利用 Rational Team Concert 在敏捷開發中進行持續集成」 (developerWorks,2010 年 4 月):本文將介紹如何利用 Rational Team Concert(RTC)在敏捷開發過程當中進行持續集成。詳細說明了如何在 RTC 中經過採起一系列的步驟和腳本開發,來保證繼續集成過程的連續和提升整個項目的效率。同時還闡述了每一步能夠利用的工具和最佳實踐,從而使開發過程更加規 範化,高效化。
「創建智慧的軟件開發中心,第 3 部分:重視持續集成及應用生命週期管理平臺」(developerWorks,2010 年 6 月):本文分析了銀行軟件開發中心應重視持續集成及應用生命週期管理平臺的問題。
「使用 Rational BuildForge 實現軟件開發的構建管理自動化及持續集成」 (developerWorks,2011 年 2 月):本文將介紹持續集成的意義、概要描述 Lotus Symphony 的開發模式,及如何用 Rational BuildForge 實現對 Symphony 開發的支持。從應用的角度講述,如何應用 BuildForge 實現軟件產品的持續集成以及構建管理。
developerWorks Java 技術專區:這裏有數百篇關於 Java 編程各個方面的文章。