Linux上快速搭建Jenkins服务器 实现持续集成开发
http://my.oschina.net/long0419/blog/183299
簡介: 持續(xù)集成是一種軟件開發(fā)實踐,對于提高軟件開發(fā)效率并保障軟件開發(fā)質(zhì)量提供了理論基礎(chǔ)。Jenkins 是一個開源軟件項目,旨在提供一個開放易用的軟件平臺,使持續(xù)集成變成可能。本文正是從持續(xù)集成的基本概念入手,通過具體實例,介紹了如何基于 Jenkins 快速搭建持續(xù)集成環(huán)境。持續(xù)集成概述
什么是持續(xù)集成
隨著軟件開發(fā)復(fù)雜度的不斷提高,團隊開發(fā)成員間如何更好地協(xié)同工作以確保軟件開發(fā)的質(zhì)量已經(jīng)慢慢成為開發(fā)過程中不可回避的問題。尤其是近些年來,敏捷(Agile) 在軟件工程領(lǐng)域越來越紅火,如何能再不斷變化的需求中快速適應(yīng)和保證軟件的質(zhì)量也顯得尤其的重要。
持續(xù)集成正是針對這一類問題的一種軟件開發(fā)實踐。它倡導(dǎo)團隊開發(fā)成員必須經(jīng)常集成他們的工作,甚至每天都可能發(fā)生多次集成。而每次的集成都是通過自動化的構(gòu)建來驗證,包括自動編譯、發(fā)布和測試,從而盡快地發(fā)現(xiàn)集成錯誤,讓團隊能夠更快的開發(fā)內(nèi)聚的軟件。
持續(xù)集成的核心價值在于:
持續(xù)集成的原則
業(yè)界普遍認同的持續(xù)集成的原則包括:
1)需要版本控制軟件保障團隊成員提交的代碼不會導(dǎo)致集成失敗。常用的版本控制軟件有 IBM Rational ClearCase、CVS、Subversion 等;
2)開發(fā)人員必須及時向版本控制庫中提交代碼,也必須經(jīng)常性地從版本控制庫中更新代碼到本地;
3)需要有專門的集成服務(wù)器來執(zhí)行集成構(gòu)建。根據(jù)項目的具體實際,集成構(gòu)建可以被軟件的修改來直接觸發(fā),也可以定時啟動,如每半個小時構(gòu)建一次;
4)必須保證構(gòu)建的成功。如果構(gòu)建失敗,修復(fù)構(gòu)建過程中的錯誤是優(yōu)先級最高的工作。一旦修復(fù),需要手動啟動一次構(gòu)建。
持續(xù)集成系統(tǒng)的組成
由此可見,一個完整的構(gòu)建系統(tǒng)必須包括:
Jenkins 簡介
Jenkins 是一個開源項目,提供了一種易于使用的持續(xù)集成系統(tǒng),使開發(fā)者從繁雜的集成中解脫出來,專注于更為重要的業(yè)務(wù)邏輯實現(xiàn)上。同時 Jenkins 能實施監(jiān)控集成中存在的錯誤,提供詳細的日志文件和提醒功能,還能用圖表的形式形象地展示項目構(gòu)建的趨勢和穩(wěn)定性。下面將介紹 Jenkins 的基本功能。
Jenkins 的安裝非常簡單,只需要從 Jenkins 的主頁上下載最新的 jenkins.war 部署到對應(yīng)的應(yīng)用服務(wù)器的webapp目錄中(如tomcat中的webapp) ,啟動應(yīng)用服務(wù)器 , 在地址欄中輸入?http://ip地址 : 服務(wù)器端口號/jenkins 。 就可以進入Jenkins了。
圖一:Jenkins 主界面
非常有趣的是,Jenkins 還提供了非常豐富的插件支持,這使得 Jenkins 變得越來越強大。我們可以方便的安裝各種第三方插件,從而方便快捷的集成第三方的應(yīng)用。比如 Jenkins 提供了對于 IBM Rational ClearCase 的插件支持。
圖 4. Jenkins 可以集成 ClearCase 插件?
此外,Jenkins 提供了豐富的管理和配置的功能,包括系統(tǒng)配置、管理插件、查看系統(tǒng)信息、系統(tǒng)日志、節(jié)點管理、Jenkins 命令行窗口、信息統(tǒng)計等功能。試試看,您就會發(fā)現(xiàn) Jenkins 非常好上手使用。
圖 5. Jenkins 提供了豐富的管理功能?
基于 Jenkins 快速搭建持續(xù)集成環(huán)境
正如前文中所描述的那樣,一個持續(xù)集成環(huán)境需要包括三個方面要素:代碼存儲庫、構(gòu)建過程和持續(xù)集成服務(wù)器。對 Jenkins 有了初步了解后,我們通過一個實例來集中展示如何快速搭建一個簡單的基于 Jenkins 的持續(xù)集成環(huán)境。
假設(shè)我們使用的代碼存儲庫是 IBM Rational ClearCase。Jenkins 提供了對 ClearCase 的插件支持,它能方便地讓我們連接到 Base ClearCase 或者 UCM ClearCase,使其成為 Jenkins Project 的代碼控制器。另外,這個插件是基于 cleartool 命令的,所以必須在 Jenkins 的持續(xù)集成服務(wù)器上安裝 ClearCase 的客戶端程序。
在 Jenkins 的插件管理界面中選擇 ClearCase Plugin,點擊頁面下方的 Install 按鈕。
圖 6. 選擇 ClearCase 插件?
在打開的頁面中提示安裝完成后,Jenkins 需要重新啟動來激活這個插件。重新執(zhí)行 java -jar Jenkins.war 后,在 Jenkins 的頁面中,我們就能看到 ClearCase plugin 已經(jīng)被安裝到 Jenkins 了。
圖 7. ClearCase 插件安裝成功?
類似 IBM Rational ClearCase,SVN(subversion)是目前比較流行的版本管理工具。很多開源軟件都是用 SVN 作為代碼版本管理軟件。為了讓實例更具有代表性,本文中我們使用 SVN 作為代碼存儲器。
接下來,我們開始新建一個 Jenkins 項目, 由于我們需要連接 SVN 的代碼存儲器, 我們選擇 Build a free-style software project。
圖 8. 新建 JenkinsTest Job?
然后我們就可以很方便的配置這個 JenkinsTest 項目了。Jenkins 很人性化的一點是在每個配置項的右側(cè)都有一個幫助的圖標,點擊這個圖標,Jenkins 會告訴您如何配置這個配置項。
圖 9. 配置 JenkinsTest?
根據(jù)實際的 SVN 服務(wù)器服務(wù)器信息配置 Source Code Management,這能讓 Jenkins 知道如何從哪里獲取最新的代碼。本例中假設(shè) Repository 就在本地。
圖 10. 配置連接到 SVN 服務(wù)器?
根據(jù)開發(fā)需要,假設(shè)每一個小時我們需要重新構(gòu)建一次。選擇 Build periodically,在 Schedule 中填寫 0 * * * *。
第一個參數(shù)代表的是分鐘 minute,取值 0~59;
第二個參數(shù)代表的是小時 hour,取值 0~23;
第三個參數(shù)代表的是天 day,取值 1~31;
第四個參數(shù)代表的是月 month,取值 1~12;
最后一個參數(shù)代表的是星期 week,取值 0~7,0 和 7 都是表示星期天。
所以 0 * * * * 表示的就是每個小時的第 0 分鐘執(zhí)行一次構(gòu)建。
圖 11. 選擇如何觸發(fā)構(gòu)建?
接下來就是要添加 build 的步驟了。Jenkins 提供了四個選項供我們選擇,可以根據(jù)需要執(zhí)行或調(diào)用外部命令和腳本。
圖 12. 四種 build step 供選擇?
在本例中,我們通過調(diào)用和執(zhí)行 Windows batch command,將 SVN repository 中 Java 代碼編譯并生成 Jar 文件。也可以根據(jù)項目的實際編寫自己的 shell 腳本配置在這里。
圖 13. 配置 Execute Windows batch command?
選擇和配置其他的選項,比如郵件提醒,然后點擊 save 保存。
圖 14. 配置郵件提醒?
接下來的每小時的第 0 分鐘,JenkinsTest Job 就會被構(gòu)建。我們可以在 Jenkins 中觀察構(gòu)建的進度和最終的狀態(tài)--成功或者失敗。太陽代表之前的構(gòu)建沒有任何失敗,藍色的小球代表構(gòu)建成功。
圖 15. JenkinsTest 開始構(gòu)建?
同時我們可以點擊 JenkinsTest 查看單次構(gòu)建的 Console 的輸出結(jié)果。從中我們能看到構(gòu)建的第一步是從 SVN 服務(wù)器上 check out 代碼,然后調(diào)用我們先前配置的 Windows batch command。
圖 16. JenkinsTest 構(gòu)建的 console 輸出?
最后,我們可以看到 build 的最后結(jié)果 Success,表明本次構(gòu)建成功。
圖 17. 構(gòu)建成功的 Console 輸出?
接下來我們再次新建一個 Jenkins 的 Job,用于將生成的 build 分發(fā)到不同的節(jié)點上。這次 build triggers 我們選擇 Build after other projects are built,讓這個 Job 在 JenkinsTest 成功 build 后觸發(fā)。這樣一來就能達到我們自動 build 和自動分發(fā)的功能。
圖 18. 新建 Distribute job?
不同的是,這次我們選擇調(diào)用 Ant 腳本來完成分發(fā)的工作。只需要將 Ant 腳本的 XML 的文件配置在 Targets 中供 Jenkins 調(diào)用。
圖 19. Distribute 調(diào)用外部 Ant 腳本?
然后我們就可以在 Jenkins 中觀察構(gòu)建的狀態(tài)了。一旦構(gòu)建失敗我們能看到相應(yīng)的警示圖標,同時,如果配置了郵件提醒,相關(guān)人員也會受到郵件。記住我們先前所提醒的那樣,分析和處理構(gòu) 建的失敗是優(yōu)先級最高的工作。接下來,我們還可以加入更多的 Jenkins 項目來實現(xiàn)自動化測試等功能,讓持續(xù)集成更方便有效地服務(wù)于項目開發(fā)。
圖 20. 查看持續(xù)集成狀態(tài)?
============================================
實際在安裝過程中遇到的一些問題(linux中):
1.Linux SSH服務(wù)器不存在證書,連接svn時會出現(xiàn)?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?)
解決方法:
本地服務(wù)器上安裝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':
- 如報錯則執(zhí)行(安裝一個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://.......) 這時服務(wù)器會從svn服務(wù)器上獲取當前證書。
2.Jenkins遠程發(fā)布war包 :
首先需要在jenkins上面安裝Deploy war to/ear to container 插件
然后需要在Tomcat(或者其他應(yīng)用服務(wù)器中設(shè)置管理員權(quán)限) ,這里在tomcat-user.xml中設(shè)置manager-script 權(quán)限 然后再Jenkins上填寫對應(yīng)用戶及其服務(wù)器地址:
說明:tomcat 服務(wù)器webapp中ROOT、 host-manager 原有文件夾一定不能刪除
結(jié)束語
本文簡單介紹了持續(xù)集成的概念并著重介紹了如何基于 Jenkins 快速構(gòu)建持續(xù)集成環(huán)境。通過具體實例的描述,相信讀者對 Jenkins 的基本功能和實現(xiàn)方法有個更清楚地認識和理解。其實,Jenkins 的功能遠不至文中所述的這些,Jenkins 還有詳盡的日志處理和持續(xù)集成構(gòu)建狀態(tài)的分析等功能。希望在進一步的學(xué)習(xí)和應(yīng)用中與大家分享。
總結(jié)
以上是生活随笔為你收集整理的Linux上快速搭建Jenkins服务器 实现持续集成开发的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GitLab 安装笔记
- 下一篇: linux下kill多个进程