簡介: 持續集成是一種軟件開發實踐,對於提升軟件開發效率並保障軟件開發質量提供了理論基礎。Jenkins 是一個開源軟件項目,旨在提供一個開放易用的軟件平臺,使持續集成變成可能。本文正是從持續集成的基本概念入手,經過具體實例,介紹瞭如何基於 Jenkins 快速搭建持續集成環境。java
隨着軟件開發複雜度的不斷提升,團隊開發成員間如何更好地協同工做以確保軟件開發的質量已經慢慢成爲開發過程當中不可迴避的問題。尤爲是近些年來,敏捷(Agile) 在軟件工程領域愈來愈紅火,如何能再不斷變化的需求中快速適應和保證軟件的質量也顯得尤爲的重要。shell
持續集成正是針對這一類問題的一種軟件開發實踐。它倡導團隊開發成員必須常常集成他們的工做,甚至天天均可能發生屢次集成。而每次的集成都是經過自動化的構建來驗證,包括自動編譯、發佈和測試,從而儘快地發現集成錯誤,讓團隊可以更快的開發內聚的軟件。apache
持續集成的核心價值在於:tomcat
持續集成中的任何一個環節都是自動完成的,無需太多的人工干預,有利於減小重複過程以節省時間、費用和工做量;服務器
持續集成保障了每一個時間點上團隊成員提交的代碼是能成功集成的。換言之,任什麼時候間點都能第一時間發現軟件的集成問題,使任意時間發佈可部署的軟件成爲了可能;app
持續集成還能利於軟件自己的發展趨勢,這點在需求不明確或是頻繁性變動的情景中尤爲重要,持續集成的質量能幫助團隊進行有效決策,同時創建團隊對開發產品的信心。webapp
業界廣泛認同的持續集成的原則包括:
1)須要版本控制軟件保障團隊成員提交的代碼不會致使集成失敗。經常使用的版本控制軟件有 IBM Rational ClearCase、CVS、Subversion 等;
2)開發人員必須及時向版本控制庫中提交代碼,也必須常常性地從版本控制庫中更新代碼到本地;
3)須要有專門的集成服務器來執行集成構建。根據項目的具體實際,集成構建能夠被軟件的修改來直接觸發,也能夠定時啓動,如每半個小時構建一次;
4)必須保證構建的成功。若是構建失敗,修復構建過程當中的錯誤是優先級最高的工做。一旦修復,須要手動啓動一次構建。
因而可知,一個完整的構建系統必須包括:
一個自動構建過程,包括自動編譯、分發、部署和測試等。
一個代碼存儲庫,即須要版本控制軟件來保障代碼的可維護性,同時做爲構建過程的素材庫。
一個持續集成服務器。本文中介紹的 Jenkins 就是一個配置簡單和使用方便的持續集成服務器。
Jenkins 是一個開源項目,提供了一種易於使用的持續集成系統,使開發者從繁雜的集成中解脫出來,專一於更爲重要的業務邏輯實現上。同時 Jenkins 能實施監控集成中存在的錯誤,提供詳細的日誌文件和提醒功能,還能用圖表的形式形象地展現項目構建的趨勢和穩定性。下面將介紹 Jenkins 的基本功能。
Jenkins 的安裝很是簡單,只須要從 Jenkins 的主頁上下載最新的 jenkins.war 部署到對應的應用服務器的webapp目錄中(如tomcat中的webapp) ,啓動應用服務器 , 在地址欄中輸入 http://ip地址 : 服務器端口號 /jenkins 。 就能夠進入Jenkins了。
很是有趣的是,Jenkins 還提供了很是豐富的插件支持,這使得 Jenkins 變得愈來愈強大。咱們能夠方便的安裝各類第三方插件,從而方便快捷的集成第三方的應用。好比 Jenkins 提供了對於 IBM Rational ClearCase 的插件支持。
圖 4. Jenkins 能夠集成 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 腳本配置在這裏。
圖 13. 配置 Execute Windows batch command
選擇和配置其餘的選項,好比郵件提醒,而後點擊 save 保存。
接下來的每小時的第 0 分鐘,JenkinsTest Job 就會被構建。咱們能夠在 Jenkins 中觀察構建的進度和最終的狀態--成功或者失敗。太陽表明以前的構建沒有任何失敗,藍色的小球表明構建成功。
同時咱們能夠點擊 JenkinsTest 查看單次構建的 Console 的輸出結果。從中咱們能看到構建的第一步是從 SVN 服務器上 check out 代碼,而後調用咱們先前配置的 Windows batch command。
圖 16. JenkinsTest 構建的 console 輸出
最後,咱們能夠看到 build 的最後結果 Success,代表本次構建成功。
接下來咱們再次新建一個 Jenkins 的 Job,用於將生成的 build 分發到不一樣的節點上。此次 build triggers 咱們選擇 Build after other projects are built,讓這個 Job 在 JenkinsTest 成功 build 後觸發。這樣一來就能達到咱們自動 build 和自動分發的功能。
不一樣的是,此次咱們選擇調用 Ant 腳原本完成分發的工做。只須要將 Ant 腳本的 XML 的文件配置在 Targets 中供 Jenkins 調用。
而後咱們就能夠在 Jenkins 中觀察構建的狀態了。一旦構建失敗咱們能看到相應的警示圖標,同時,若是配置了郵件提醒,相關人員也會受到郵件。記住咱們先前所提醒的那樣,分析和處理構 建的失敗是優先級最高的工做。接下來,咱們還能夠加入更多的 Jenkins 項目來實現自動化測試等功能,讓持續集成更方便有效地服務於項目開發。
============================================
實際在安裝過程當中遇到的一些問題(linux中):
1.Linux SSH服務器不存在證書,鏈接svn時會出現 svn: E175002 錯誤
svn: E175002: OPTIONS /svn/01_%E5%85%AC%E5%8F%B8%E4%B8%9A%E5%8A%A1/06_%E6%95%99%E8%82%B2%E4%BA%91/01_%E5%B7%A5%E7%A8%8B/02_%E7%BC%96%E7%A0%81/%E5%AD%A6%E4%B9%A0%E5%B9%B3%E5%8F%B0/%E5%B9%B3%E5%8F%B0/branches/guizhou/edu-service failed (show details)
(Maybe you need to enter credential?)
解決方法:
本地服務器上安裝svn客戶端(具體步驟) :
http://subversion.apache.org/download/
http://d.1tpan.com/tp1810407612
wget http://apache.communilink.net/subversion/subversion-1.7.5.tar.bz2
下載subversion-1.7.5.tar.bz2
解壓
tar xvfj subversion-1.7.5.tar.bz2
cd subversion-1.7.5
得到依賴
./get-deps.sh
./configure
configure: error: in `/root/subversion-1.7.5':
如報錯則執行(安裝一個C編譯器)
yum install gcc
configure: error: We require OpenSSL; try --with-openssl
yum install openssl
yum install openssl-devel
make
make install
svn help
不用使用svn checkout將全部代碼下載下來 ,本人直接使用
svn log (svn://.......) 這時服務器會從svn服務器上獲取當前證書。
(刪除以前svn記錄 rm -rf ~/.subversion/auth)
2.Jenkins遠程發佈war包 :
首先須要在jenkins上面安裝Deploy war to/ear to container 插件
而後須要在Tomcat(或者其餘應用服務器中設置管理員權限) ,這裏在tomcat-user.xml中設置manager-script 權限 而後再Jenkins上填寫對應用戶及其服務器地址:
說明:tomcat 服務器webapp中ROOT、 host-manager 原有文件夾必定不能刪除
本文簡單介紹了持續集成的概念並着重介紹瞭如何基於 Jenkins 快速構建持續集成環境。經過具體實例的描述,相信讀者對 Jenkins 的基本功能和實現方法有個更清楚地認識和理解。其實,Jenkins 的功能遠不至文中所述的這些,Jenkins 還有詳盡的日誌處理和持續集成構建狀態的分析等功能。但願在進一步的學習和應用中與你們分享。