個人環境搭建——搭建jenkins持續構建集成環境


---恢復內容開始---

搭建jenkins持續構建集成環境

 

 要搭建jenkins持續構建集成環境,首先要安裝tomcat和JDK;

 

第一部分,基本說明:

 

敏捷(Agile) 在軟件工程領域越來越紅火,如何能再不斷變化的需求中快速適應和保證軟件的質量也顯得尤其的重要。

它倡導團隊開發成員必須經常集成他們的工作,甚至每天都可能發生多次集成。而每次的集成都是通過自動化的構建來驗證,包括自動編譯、發布和測試,從而盡快地發現集成錯誤,讓團隊能夠更快的開發內聚的軟件。

持續集成的核心價值在於:

  1. 1.  持續集成中的任何一個環節都是自動完成的,無需太多的人工干預,有利於減少重復過程以節省時間、費用和工作量;
  2. 2.  持續集成保障了每個時間點上團隊成員提交的代碼是能成功集成的。換言之,任何時間點都能第一時間發現軟件的集成問題,使任意時間發布可部署的軟件成為了可能;
  3. 3.  持續集成還能利於軟件本身的發展趨勢,這點在需求不明確或是頻繁性變更的情景中尤其重要,持續集成的質量能幫助團隊進行有效決策,同時建立團隊對開發產品的信心。

持續集成的原則

業界普遍認同的持續集成的原則包括:

1)需要版本控制軟件保障團隊成員提交的代碼不會導致集成失敗。常用的版本控制軟件有 IBM Rational ClearCase、CVS、Subversion 等;

2)開發人員必須及時向版本控制庫中提交代碼,也必須經常性地從版本控制庫中更新代碼到本地;

3)需要有專門的集成服務器來執行集成構建。根據項目的具體實際,集成構建可以被軟件的修改來直接觸發,也可以定時啟動,如每半個小時構建一次;

4)必須保證構建的成功。如果構建失敗,修復構建過程中的錯誤是優先級最高的工作。一旦修復,需要手動啟動一次構建。

持續集成系統的組成

由此可見,一個完整的構建系統必須包括:

1,一個自動構建過程,包括自動編譯、分發、部署和測試等。

2,一個代碼存儲庫,即需要版本控制軟件來保障代碼的可維護性,同時作為構建過程的素材庫。

3,一個持續集成服務器。本文中介紹的 Jenkins 就是一個配置簡單和使用方便的持續集成服務器。

基於Jenkins 快速搭建持續集成環境

正如前文中所描述的那樣,一個持續集成環境需要包括三個方面要素:代碼存儲庫、構建過程和持續集成服務器。對Jenkins 有了初步了解后,我們通過一個實例來集中展示如何快速搭建一個簡單的基於Jenkins 的持續集成環境。

 

 

第二部分,jenkins和svn的持續構建環境構建:

SVN(subversion)是目前比較流行的版本管理工具。很多開源軟件都是用 SVN 作為代碼版本管理軟件。為了讓實例更具有代表性,本文中我們使用 SVN 作為代碼存儲器。

接下來,我們開始新建一個 Jenkins 項目, 由於我們需要連接 SVN 的代碼存儲器, 我們選擇 Build a free-style software project

 

一, 安裝jenkins;                        (第一步,下載安裝jenkins)

從官網下載jenkins.war包,放到tomcat中的webapps目錄下作為tomcat的一個應用;

官方下載地址: http://mirrors.jenkins-ci.org/war/

或直接使用命令行,按照官網上的方法安裝:

wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -
deb http://pkg.jenkins-ci.org/debian binary/
sudo apt-get update
sudo apt-get install jenkins

 

 

二, 對jenkins系統全局配置;              (第二步,全局配置jenkins)

   配置Jenkins全局變量,進入菜單:系統管理 -> 系統設置

2.1  配置JDK

因為buildr啟動時需要jvm,所以我們這里需要配置下jdk,如下圖:

 

 

2.2  配置版本控制庫,這里用的是SVN,如圖所示:

Name可以自由定制,下面的Path需設置成svn代碼倉庫的目錄,

 

 

2.3  配置emai-ext,如圖所示:

這里沒有用jenkins自帶的郵件配置,因為它沒有模板,也不能配置觸發機制。下圖字段的如果不清楚其含義,請點擊問號,看幫助。



 

 

2.4  配置郵件通知(如果使用email-ext,這里可不設置)

 

 

2.5  安裝插件

配置聲音插件

首先,需要在另一台jenkins服務器添加jenkins服務器的public key,並加入信任列表,具體步驟如下圖



然后,配置系統設置,在此之前,請在需要播放聲音的遠程linux上安裝play插件,sudo apt-get install sox

 

 

安裝ClearCase的插件:

假設我們使用的代碼存儲庫是 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 了。

 

 

2.6 Jenkins的授權和訪問控制

1 Jenkins的授權和訪問控制

默認地Jenkins不包含任何的安全檢查,任何人可以修改Jenkins設置,job和啟動build等。顯然地在大規模的公司需要多個部門一起協調工作的時候,沒有任何安全檢查會帶來很多的問題。我們可以通過以下2方面來增強Jenkins的安全:

1 Security Realm,用來決定用戶名和密碼,且指定用戶屬於哪個組;

2 Authorization Strategy,用來決定用戶對那些資源有訪問權限;

Manage Jenkins -> Configure System -> Enable Security下可以看到可以使用多種方式來增強Jenkins的授權和訪問控制。

 

 

2)創建管理員賬號+匿名只讀

簡單地設置一個管理員賬號,用來管理jenkins設置,修改job和執行build等。其他的匿名訪問的用戶將只有只讀的權限,不能修改Jenkins的設置,不能修改job,且不能運行build,但是可以訪問build的結構,查看buildlog等。

1)需要對Jenkins增加如下的啟動參數來創建管理員賬號:

java -jar jenkins.war --argumentsRealm.passwd.user=password —argumentsRealm.roles.user=admin

例如設置管理員用戶為jenkins且密碼為swordfish,如下:

java -jar jenkins.war --argumentsRealm.passwd.jenkins=swordfish —argumentsRealm.roles.jenkins=admin

2)在啟動后需要在Manage Jenkins -> Configure System來選擇enable security,然后選擇對Security Realm選擇Delegate to servlet container,對Authorization選擇Legacy Mode

 

 

3)然后可以在右上角點擊login或者http://yourhost/jenkins/loginEntry來登錄,登錄后此時你用戶管理員權限,可以執行任何的操作。執行完操作后可以選擇logout

 

4developers增加rebuild的權限。

使用管理員登錄對需要developer rebuildjob,選擇Trigger builds remotely,且設置Authentication Token,例如設置為devbuild,然后developers可以訪問http://jenkinsHost/job/project/build?token=token 來啟動build

其中Project為你需要啟動buildjob。其中token為你設置的Authentication Token

如果你有webserver,你可以創建如下的webpage來讓developers來啟動build

<h1>Jenkins Force Build Page</h1>
<ul>
    <li>
    <a href="http://jenkins:8080/job/FOO/build?token=build">Force build of Project FOO on Jenkins</a>
    </li>
</ul>


3使用Jenkins的數據庫管理用戶且設置用戶的訪問權限

1)在Manage Jenkins -> Configure System -> Enable Security下為Security Realm選擇Jenkins's own user database,且確保Allow users to sign up選中,為Authentication選擇Matrix-based security。如下:



2)接着在主頁上signup創建第一個管理員賬號jenkins如下:

 

3)除了第一個賬號以后signup的賬號將為只讀賬號需要管理員分配權限。例如你可以signup來創建dev賬號,然后分配權限使得dev可以啟動jobbuild。如下:

 

注意:%JENKINS_HOME%\config.xml中可以查看和修改所有用戶的權限設置,但是修改后需要重新啟動Jenkins

可以參考:

https://wiki.jenkins-ci.org/display/JENKINS/Quick+and+Simple+Security

https://wiki.jenkins-ci.org/display/JENKINS/Standard+Security+Setup

 

 

 

三, 使用jenkins新建項目並配置;                   (第三步,新建項目並配置)

在瀏覽器中輸入:http://localhost:8080/jenkins ,打開jenkins配置管理首頁面,下面的操作都是基於jenkins的首頁面的操作;假如是第一次或新建一個jenkins管理項目,則需要按如下基本步驟進行配置:

 

(1) 新建 JenkinsTest Job

填寫job name項:JenkinsTest;並選擇創建一個“Build a free-style software project”,如下圖:

 

點擊“OK”后,進入到項目配置頁面,然后進行自己配置;

 

(2)配置 JenkinsTest

然后我們就可以很方便的配置這個 JenkinsTest 項目了。Jenkins 很人性化的一點是在每個配置項的右側都有一個幫助的圖標,點擊這個圖標,Jenkins 會告訴您如何配置這個配置項。在“source code management”中選擇“Subversion”項,如下圖:

 

 

(3)配置版本控制庫 SVN 服務器

源代碼管理根據自己的需要進行選擇,根據實際的 SVN 服務器服務器信息配置 Source Code Management,這能讓 Jenkins 知道如何從哪里獲取最新的代碼,我的源代碼是使用svn管理的,這里選擇“Subversion Modules”,在"Repository URL"錄入你的svn倉庫地址;第一次錄入時還需要輸入登錄svn倉庫的用戶名和口令。本例中假設 Repository 就在本地。

本地路徑格式: file:///home/sun/svn/myproject

遠程路徑格式: svn://localhost/myproject

              http://localhost/myproject (只適用於已經搭建好SVN的web服務器的情況)

 

 

(4)選擇如何觸發構建

通過構建觸發器“Build Triggers”配置如何進行觸發構建,jenkins內置的構建觸發器有四種選擇:

1 build after other projects are built     可以設置多個依賴的jobs,當任意一個依賴的jobs成功后啟動此build  多個依賴的jobs間使用,隔開。

2 Trigger builds remotely (e.g., from scripts)  Authentication Token中指定TOKEN_NAME,然后可以通過連接JENKINS_URL/job/JOBNAME/build?token=TOKEN_NAME來啟動build

3  build periodically   schedule中設置,語法類似於cron中語法。

4 Poll SCM      schedule中設置時間間隔來抓取SCM server,如果有新的修改,則啟動build所以這里的作用相當於continous build

根據開發需要,假設每一個小時我們需要重新構建一次。選擇 “Build periodically”,在 “Schedule” 中填寫 0 * * * *。

第一個參數代表的是分鍾 minute,取值 0~59;

第二個參數代表的是小時 hour,取值 0~23;

第三個參數代表的是天 day,取值 1~31;

第四個參數代表的是月 month,取值 1~12;

最后一個參數代表的是星期 week,取值 0~7,0 和 7 都是表示星期天。

所以 0 * * * * 表示的就是每個小時的第 0 分鍾執行一次構建。

 

 

下圖是 設置為輪詢SVN的代碼服務器

 

若還不甚明白,可以點擊后面的幫助圖標,點擊這個圖標,Jenkins 就會告訴您應該如何配置這個配置項。

 

(5)選擇build 方式

接下來就是要添加 build 的步驟了。Jenkins 提供了四個選項供我們選擇,可以根據需要執行或調用外部命令和腳本。

 

在本例中,我們通過調用和執行Shell腳本 ,將 SVN repository 中 C/C++ 代碼編譯並生成elf二進制文件。也可以根據項目的實際編寫自己的 shell 腳本配置在這里。在編寫shell腳本時,需要注意可以使用一些jenkins自己的環境變量。

 

配置 Execute Shell

    例如:cd ${WORKSPACE}/myproject ; /bin/bash ./build.sh

 

附注:jenkins內置的環境變量

BUILD_NUMBER,   唯一標識一次build,例如23;

BUILD_ID,         基本上等同於BUILD_NUMBER,但是是字符串,例如2011-11-15_16-06-21;

JOB_NAME,        job的名字,例如JavaHelloWorld;

BUILD_TAG,       作用同BUILD_ID,BUILD_NUMBER,用來全局地唯一標識一此build,例如jenkins-JavaHelloWorld-23;

EXECUTOR_NUMBER,   例如0;

NODE_NAME,           slave的名字,例如MyServer01;

NODE_LABELS,         slave的label,標識slave的用處,例如JavaHelloWorld MyServer01;

JAVA_HOME,           java的home目錄,例如C:\Program Files (x86)\Java\jdk1.7.0_01;

WORKSPACE,           job的當前工作目錄,例如c:\jenkins\workspace\JavaHelloWorld;

HUDSON_URL = JENKINS_URL, jenkins的url,例如http://localhost:8000/ ;

BUILD_URL,             build的url 例如http://localhost:8000/job/JavaHelloWorld/23/;

JOB_URL,               job的url,例如http://localhost:8000/job/JavaHelloWorld/;

SVN_REVISION,         svn 的revison,

 

(6)配置郵件提醒

在選擇完成build方式后,選擇“Post-build Actions”配置其他的選項,有7種方式可選:

 

比如郵件提醒設置,

 

 

(7)配置保存

然后點擊 save ,保存jenkins的配置信息。

 

 

 

四, 項目的構建jenkins使用                            (第四步,jenkins基本使用說明)

(1) JenkinsTest 開始構建

接下來的每小時的第 0 分鍾,JenkinsTest Job 就會被構建;或者在工作區域的左邊菜單上點“build now”,開始構建項目。我們可以在 Jenkins 中觀察構建的進度和最終的狀態——成功或者失敗。太陽代表之前的構建沒有任何失敗,如果構建成功,則項目狀態的S為藍色,如果失敗則為紅色。

 

 

(2) JenkinsTest 構建的 console 輸出

同時我們可以點擊 JenkinsTest 查看單次構建的 Console 的輸出結果。從中我們能看到構建的第一步是從 SVN 服務器上 check out 代碼,然后調用我們先前配置的 shell腳本。

 

 

構建失敗的 Console 輸出:

 

 

構建完成,左邊菜單會顯示有“控制台輸出”,點擊可以查看控制台詳細輸出。構建錯誤時也可以根據相應的錯誤信息進行修改。我們可以看到 build 的最后結果 FAILURE,表明本次構建失敗了,從前面可以看到是因為找不到build.sh文件。

 

構建成功的 Console 輸出:

 

 

最后,可以看到 build 的最后結果 Success,表明本次構建成功。

 

 

五, jenkins與CI插件集成 

5.1  項目中存在的問題

在當前項目中,存在問題:

■ 代碼風格各異,同時缺少必要代碼注釋

 常出現空指針類似的基礎bug

■ 代碼單元測試缺失,測試場景覆蓋不大

■ 重復代碼大量出現

■ 轉測試后,基礎用例需要大量人力去驗證

■ 其他:缺少性能測試

 

可能會導致的后果:

 他人閱讀代碼困難,后期維護成本增加

■ 代碼質量不高,后期維護成本增加

■ 開發成本增加,后期維護成本增加

■ 測試成本明顯增加

因此需要一個持續代碼集成,能夠讓開發或測試減少成本,提高質量工具,而jenkins正好可以與CI插件集成起來,實現這些功能。

 

5.2 解決方案

■ 代碼風格各異,通過統一checkstyle樣式來檢查

■ 常出現空指針類似的基礎bug,可以通過findbugs靜態檢查

■ 多余if或者try catch,可以通過pmd檢查

■ 單元測試用例測試功能結果,可以通過xunit報告檢查

■ 大量重復代碼,可以通過duplicate code報告來檢查

■ 測試用例覆蓋度,能夠通過clover來檢查

■ 基礎功能,可以通過selenium自動化測試

■ 性能測試,可以通過jmeter來完成

雖然項目人員能夠自己使用這些工具,完善代碼,提高質量,但是卻不方便項目統一管理。而Jenkins能夠集成這些插件,做到統一管理,解決項目問題。

Jenkins,之前叫做Hudson,是基於Java開發的一種持續集成工具,用於監控秩序重復的工作。

主要包括:

1、持續的軟件版本發布/測試項目。 

2、監控外部調用執行的工作。 

Jenkins能夠集成各式插件,如常用CI插件:deploy,junit,findbugs,pmd,checkstyle,clover, duplicate code,jmeter,selenium等,而這些工具正好可以解決項目存在一些問題。

 

 

5.3 實施方案

jenkins上CI插件安裝

■ 手動安裝

第一步,查詢需要插件名稱 https://wiki.jenkins-ci.org/display/JENKINS/Plugins

第二步,查詢插件是否依賴其他插件

第三步,進入插件下載頁面http://updates.jenkins-ci.org/download/plugins/?C=N;O=D,下載插件

第四步,將插件放到${jenkins安裝目錄}/jenkins_home/plugins,手動重啟服務。即進去${jenkins安裝目錄}/tomcat7/bin,使用shutdown.sh與startup.sh關閉或者啟動jenkins服務。

 

■ jenkins管理平台安裝

第一步,進入jenkins管理平台,點擊登錄。(第一個注冊的即為管理員)

第二步,點擊左邊菜單系統管理,在彈出頁面中選擇管理插件

第三步,點擊可選插件,找到需要安裝插件

勾選安裝后重啟或者先下載重啟后再安裝,也可以進入命令行手動重啟jenkins。

 

附注:

具體的安裝步驟可以參考:http://wchlt.blog.163.com/blog/static/2196057201372833659235/

 

5.4 常用插件安裝

pmd

checkstyle

Publish Over FTP Plugin

Cppcheck Plugin

Static Code Analysis Plug-ins

Doxygen Plugin,

Dependency Graph View Plugin ,

cmakebuilder Plugin : 支持cmake的構建;

 

 

第三部分,結束語

本文簡單介紹了持續集成的概念並着重介紹了如何基於 Jenkins 快速構建持續集成環境。通過具體實例的描述,相信讀者對 Jenkins 的基本功能和實現方法有個更清楚地認識和理解。其實,Jenkins 的功能遠不至文中所述的這些,Jenkins 還有詳盡的日志處理和持續集成構建狀態的分析等功能。希望在進一步的學習和應用中與大家分享。

 

 

 

 

 

 

 

---恢復內容結束---


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM