1. 程式人生 > >1,Jenkins實戰應用--Jenkins介紹

1,Jenkins實戰應用--Jenkins介紹

*系列彙總*

這是一個系列文章,大大小小到今天驚然發現竟然已經累計二十篇了,也就不得不做一個小彙總。回想當初寫第一篇文章的時候,就已經決心事無鉅細,一應認真的走下來,回頭遮望,看著皇皇這麼多文章,一股強烈的成就感就此油然而生,於是便有了這些彙總整理。在這個過程當中,好像也幫助過不少的人,這是讓我尤其開心的事情,同時也結識了一些志同道合的朋友,再沒有比這更讓人覺得愉悅的事情啦!也希望以後寫出更多類似的系列文章。

如果相中哪個,點選進去便是。希望正在讀這段話的你能夠在這個小系列中獲得自信以及喜悅!

一,持續整合和Jenkins介紹

對於很多做嵌入式軟體的朋友來說,可能從來都沒有聽說過持續整合這個詞,也就無從接觸過Jenkins這個工具軟體。自去年轉調部門後,除了解了設計模式外,還有幸接觸到了Jenkins。

那什麼是持續整合?Jenkins具體用來做什麼,對軟體開發有什麼益處呢?總得來說,這兩者主要是涉及一個軟體質量的主題,特別是團隊開發軟體專案。下面就來介紹介紹下這兩者。

一,持續整合的概念

持續整合,Continuous integration ,簡稱CI。

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

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

以我經過的專案(假設為A專案)為例進行描述。

首先,解釋下整合。我們所有專案的程式碼都是託管在SVN伺服器上。每個專案都要有若干個單元測試,並有一個所謂整合測試。所謂整合測試就是把所有的單元測試跑一遍以及其它一些能自動完成的測試。只有在本地電腦上通過了整合測試的程式碼才能上傳到SVN伺服器上,保證上傳的程式碼沒有問題。所以,整合指整合測試。

再說持續。不言而喻,就是指長期的對專案程式碼進行整合測試。既然是長期,那肯定是自動執行的,否則,人工執行則沒有保證,而且耗人力。對此,我們有一臺伺服器,它會定期的從SVN中檢出程式碼,並編譯,然後跑整合測試。每次整合測試結果都會記錄在案。完成這方面工作的就是下面要介紹的Jenkins軟體。當然,它的功能遠不止這些。在我們的專案中,執行這個工作的週期是1天。也就是,伺服器每1天都會準時地對SVN伺服器上的最新程式碼自動進行一次整合測試。

二,持續整合的特點

它是一個自動化的週期性的整合測試過程,從檢出程式碼、編譯構建、執行測試、結果記錄、測試統計等都是自動完成的,無需人工干預;

需要有專門的整合伺服器來執行整合構建;

需要有程式碼託管工具支援;

三,持續整合的作用

保證團隊開發人員提交程式碼的質量,減輕了軟體釋出時的壓力;

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

上面我們瞭解了持續整合的知識。既然有這麼多的好處,那我們怎麼樣實現它呢?這就是接下來要介紹的名角:Jenkins軟體。

貳, Jenkins

一,Jenkins介紹

Jenkins,原名Hudson,2011年改為現在的名字,它 是一個開源的實現持續整合的軟體工具。官方網站:http://jenkins-ci.org/。

Jenkins 能實施監控整合中存在的錯誤,提供詳細的日誌檔案和提醒功能,還能用圖表的形式形象地展示專案構建的趨勢和穩定性。

目前持續整合(CI)已成為當前許多軟體開發團隊在整個軟體開發生命週期內側重於保證程式碼質量的常見做法。它是一種實踐,旨在緩和和穩固軟體的構建過程。並且能夠幫助您的開發團隊應對如下挑戰:

軟體構建自動化 :配置完成後,CI系統會依照預先制定的時間表,或者針對某一特定事件,對目標軟體進行構建。

構建可持續的自動化檢查 :CI系統能持續地獲取新增或修改後簽入的原始碼,也就是說,當軟體開發團隊需要週期性的檢查新增或修改後的程式碼時,CI系統會不斷確認這些新程式碼是否破壞了原有軟體的成功構建。這減少了開發者們在檢查彼此相互依存的程式碼中變化情況需要花費的時間和精力(說直接一點也是錢啊,呵呵)。

構建可持續的自動化測試 :構建檢查的擴充套件部分,構建後執行預先制定的一套測試規則,完成後觸發通知(Email,RSS等等)給相關的當事人。

生成後後續過程的自動化 :當自動化檢查和測試成功完成,軟體構建的週期中可能也需要一些額外的任務,諸如生成文件、打包軟體、部署構件到一個執行環境或者軟體倉庫。這樣,構件才能更迅速地提供給使用者使用。

部署一個CI系統需要的最低要求是,一個可獲取的原始碼的倉庫,一個包含構建指令碼的專案。

二,Jenkins特點

易安裝:僅僅一個 java -jar jenkins.war,從官網下載該檔案後,直接執行,無需額外的安裝,更無需安裝資料庫;

易配置:提供友好的GUI配置介面;

變更支援:Jenkins能從程式碼倉庫(Subversion/CVS)中獲取併產生程式碼更新列表並輸出到編譯輸出資訊中;

支援永久連結:使用者是通過web來訪問Jenkins的,而這些web頁面的連結地址都是永久連結地址,因此,你可以在各種文件中直接使用該連結;

整合E-Mail/RSS/IM:當完成一次整合時,可通過這些工具實時告訴你整合結果(據我所知,構建一次整合需要花費一定時間,有了這個功能,你就可以在等待結果過程中,幹別的事情);

JUnit/TestNG測試報告:也就是用以圖表等形式提供詳細的測試報表功能;

支援分散式構建:Jenkins可以把整合構建等工作分發到多臺計算機中完成;

檔案指紋資訊:Jenkins會儲存哪次整合構建產生了哪些jars檔案,哪一次整合構建使用了哪個版本的jars檔案等構建記錄;

支援第三方外掛:使得 Jenkins 變得越來越強大;

三,其它整合工具

其它比較著名的持續整合工具有:CruiseControl,TeamCity,Continuum等。

四,嵌入式軟體整合

據我瞭解,在嵌入式軟體開發中,很少人有用到持續整合工具。個人覺得最主要的原因是:嵌入式軟體與硬體聯絡比較緊密,很多時候難以滿足持續整合的條件——構建自動化測試。

但我們還是可以有所作為。在設計應用軟體時,把邏輯業務與硬體相關功能區分開來,對邏輯業務部分編寫單元測試,然後做整合測試。

當然,對於小型的嵌入式應用軟體就沒必要做這個整合工作了。