使用jenkins實現持續集成

jenkins 介紹

  •   它是一個自動化的週期性的集成測試過程,從檢出代碼、編譯構建、運行測試、結果記錄、測試統計等都是自動完成的,無需人工干預,有利於減少重複過程以節省時間、費用和工作量;

  • 它需要有專門的集成服務器來執行集成構建;

  • 它需要有代碼託管工具支持,比如SVN;

  • Jenkins的主要目標是監控軟件開發流程,快速顯示問題;

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

linux下的jenkins的安裝:
Jenkins 下載網址: http://jenkins-ci.org/

1.準備:JDK環境,tomcat環境,ant環境,maven環境,jenkins.war包

2.在linux上安裝JDK,tomcat和maven,這裏就不贅述了

3.將jenkins.war包放置在/tomcat/webapps下

4.然後啓動tomcat,./startup.sh & tail -f ../logs/catalina.out

5.啓動成功之後,訪問http://ip:8080(端口配置)/jenkins

打開jenkins的後臺控制頁面

初始化成功後會自動生成一個管理員密碼放到指定位置,根據頁面提示覆制密碼粘貼到輸入框就可以登錄了


3.3 初始化安裝插件

  • 登錄成功後回讓你選擇插件的安裝,可以選擇建議的安裝也可以自己進行選擇,不清楚的話可以使用建議的安裝

    由於建議安裝的插件比較多,安裝的過程有點慢,多等待一會

  • 由於建議安裝的插件比較多,安裝的過程有點慢,多等待一會

  • 安裝的過程也可能因爲網絡等一些原因安裝會失敗,現在可以無視它,點擊Continue,後面再進行手動的安裝


  • 安裝完成

  • 安裝完成後最好新創建一個管理員賬戶代替之前的臨時自動生成的密碼賬戶

  • 創建新的管理員賬戶

  • 初始化完成,進入後臺管理界面

     


    初始化完成



    後臺管理界面

3.4 初始化配置

3.4.1 修改工作空間

從主頁面直接到系統管理>系統配置,點擊右邊高級按鈕

工作空間目錄直接修改默認工作空間目錄爲自定義的/home/jenkins/workspace/${ITEM_FULLNAME},如下圖:

 

3.4.2 全局配置ant

從主頁面直接到系統管理>Global Tool Configuration”,點擊右邊“Ant安裝按鈕,

name中填入名字,可以自己取,這裏我填寫成ant(到時Invoke Ant時,需要選擇ant),ANT_HOME填入Ant的環境變量

 

 3.4.3 全局配置JDK

從主頁面直接到系統管理>Global Tool Configuration”,點擊右邊“JDK安裝按鈕,

 

 

 name中填入名字,可以自己取,這裏我填寫成ant(到時Invoke Ant時,需要選擇ant),ANT_HOME填入Ant的環境變量

3.4.4 配置Credentials

這裏主要是添加信任證書,因爲我的工程的源碼是放在SVN上,所以在這裏我們就是要添加SVN的驗證,即SVN的用戶名和密碼。

從主頁面左邊菜單點擊到“Credentials”,進入到 Credentials列表,如圖所示:

 

點擊Name列中即可對Credentials中用戶進行修改、新增、刪除操作,如下圖所示:

 

修改完後,點擊下面“Save”保存按鈕即可

四、建立 Jenkins 自動化持續集成項目

4.1 安裝插件

4.1.1 常用插件

  一般情況下,常使用到如下這些插件:

  • FindBugs Plug-in: 是一個靜態分析工具,它檢查類或者 JAR 文件,將字節碼與一組缺陷模式進行對 比以發現可能的問題。

  • Checkstyle Plug-in:是一個靜態分析工具,檢查Java程序代碼。

  • Deploy to container Plugin:用於構建項目後,自動發佈war包重新部署的插件

  • SSH Plugin:這個插件使用 SSH 協議執行遠程 shell 命令。

  • Multijob Plugin:這個插件是一個將多個項目連接在一起的插件。

4.1.2 安裝步驟

  下面以安裝Checkstyle插件爲例進行說明:

在左上角“系統管理”中往下拉,找到“管理插件”點擊進去就可以查看和管理所有的插件,點擊“可選插件”顯示所有jenkins支持的插件,在右上角的“過濾”輸入框中,輸入需要安裝的插件名就可以篩選查找到想要的插件

  然後切換到“可選插件”,在右上角“過濾”框中輸入checkstyle,查詢結果如下

然後,點擊“直接安裝”按鈕,其他插件也是這樣的安裝方式!

4.2 建立項目

4.2.1 新建項目

下面以建立一個自由風格軟件項目爲例進行說明

  • 點擊左側邊欄的“新建”按鈕,新建一個任務。

  • 填寫項目的名稱,並選擇一種構建的方式,此時我們選擇第一個,構建一個自由風格的軟件項目,然後點擊“OK”按鈕創建任務,並進行詳細的配置

然後就會進行到下面這個配置頁面

接下來,我從General、源碼管理、構建觸發器、構建環境、構建、構建後操作這幾個部分來進行詳細配置說明

4.2.2 General

    這部分主要是設置下名稱、工作空間等。

第一步,點擊高級按鈕;
第二步,勾選“自定義工作空間”,輸入工作空間路徑;

若是隻有一個項目,也可以直接到“系統管理>系統配置>工作空間目錄”直接修改默認工作空間目錄,如下圖:

 

 4.2.3 源碼管理

  因爲,我們的代碼是部署在SVN服務器上的,所以這裏有下面三個步驟來配置jenkins監控SVN服務器代碼變化。
第一步,選擇Subversion;
第二步,在Repository URL輸入項目SVN地址;

第三步,在Credentials選擇SVN用戶名和賬號,初次會需要點擊Add添加,如下。

4.2.4 構建觸發器

指定的項目完成構建後,觸發此項目的構建。

  • Poll SCM:當選擇此選項,您可以指定一個定時作業表達式來定義Jenkins每隔多久檢查一下源代碼 倉庫的變化。如果發現變化,就執行一次構建。例如,表達式中填寫H 2 * * *將使Jenkins每 隔2分                  鍾就檢查一次源碼倉庫的變化。

  • Build periodically:此選項僅僅通知Jenkins按指定的頻率對項目進行構建,而不管SCM是否有變化。 如果想在這個Job中運行一些測試用例的話,它就很有幫助。

 

4.2.5 構建環境

        略

4.2.6 構建

     這部分主要是配置構建的相關內容,用於定時觸發構建或者手動執行構建的時候,對代碼檢驗、編譯時進行的操作。構建概念到處可查到,形象來說,構建就是要把代碼從某個地方拷貝過來,編譯,再拷貝到某個地方去等等操作,當然不僅與此,但是主要用來幹這個

因爲我的項目是用ant腳本實現的編譯和打包,所以我選擇的是Invoke Ant,Ant Version選擇我Ant配置的那個名字(這裏可以參見3.4.2),注意不要選擇default喔,那個選擇了沒有用。

  • 增加構建步驟:Invoke Ant

  • Targets:(什麼也沒寫,默認執行根目錄下的build.xml)

如果你的構建腳本build.xml不在workspace根目錄、或者說你的構建腳本不叫build.xml。那麼需要在高級裏設置Build File選項的路

build.xml配置文件請查看附件“build.xml說明”,裏面有每句配置說明;

checkstyleBuild.xml配置文件請查看附件“checkstyleBuild.xml說明”,裏面有每句配置說明;

findBugsBuild.xml配置文件請查看附件“findBugsBuild.xml說明”,裏面有每句配置說明。

4.2.7 構建後操作

  用於定義當前項目構建完之後的一些操作,比如構建完之後將checkstyle結果輸出到指定日誌文件,重新發布項目,去執行其他項目構建等。

4

4.2.7.1 構建後發佈項目

           注意,首先你必須安裝好Deploy Plugin插件,然後在tomcatconf目錄配置tomcat-users.xml文件,如我這裏配置的是manager<tomcat-users>節點裏添加如下內容:


配置完之後一次war包路徑、用戶名、密碼、主機即可

      配置完之後一次war包路徑、用戶名、密碼、主機即可

      參數說明:

  • WAR/EAR fileswar文件的存放位置,如:**/build/warDest/ad-gx-admin.war

  • Context path:訪問時需要輸入的內容,如ad-gx-admin訪問時如下:     http://172.16.4.166:10001/ ofCard/ad-gx-admin如果爲空,默認是war包的名字。

  • Container:選擇你的web容器,如tomca 7.x

  • Manager user name:填入tomcat-users.xml配置的username內容

  • Manager password:填入tomcat-users.xml配置的password內容

  • Tomcat URL:填入http://192.168.x.x:8080/

  • Deploy on failure:構建失敗依然部署,一般不選擇

   注意:雖然這種部署方法可能會導致tomcat加載時出現卡死的現象。但是也是最簡單的部署方式。如果卡死了重啓下就好了,將tomcatjava內存參數調高可以解決這個問題。

最後不要忘記點擊保存喔。

好了!到此一個項目的獲取源碼,打包,遠程部署

4.2.7.2構建後發佈靜態結果

  輸入配置文件

checkstyle-result.xml配置文件請查看附件“checkstyle-result.xml說明”,裏面有配置說明。

所有這些配置多做完之後,在最下方點擊“保存”按鈕,現在回到首頁去進行構建吧!!!

4.3 監控

4.3.1 主頁面介紹

 

1、左邊菜單欄

  • 新建:這裏進入新建項目。

  • 用戶:用戶管理模塊,對監控系統用戶的增刪改查。

  • 任務歷史:以往構建過的項目。

  • 系統管理:進去是一些配置方面的東西,進入之後幾個主要的子菜單分別是系統設置 、Global Tool    Configuration 管理插件 幾個模塊

  • My Views:當前監控的項目列表。

  • Credentials:添加監控源碼的的證書,其實就是SVN用戶名和密碼驗證。

 

2、監控項目列表

 這裏主要是Jenkins當前正在監控的項目列表。點擊進去可查看當前項目詳細情況。

 

模塊1

  • 狀態:最後一次構建的狀態;

  • 修改記錄:代碼修改記錄;

  • 工作空間:編譯後代碼存放的目錄;

  • 立即構建:單擊此處,可立即進行構建;

  • 刪除Project:單擊此處,可刪除該項目;

  • 配置:配置該項目相關監控信息(工作空間、chestyle規則等);

  • Checkstyle Warnings:當前這次構建發現的靜態警告;

  • FindBugs Warnings:當前這次構建發現的FindBugs

模塊2

  • 這裏顯示的最近一次構建的相關信息,是否構建成功、構建用時等

模塊3

  • Checkstyle Trend:歷史構建完之後的解決的代碼中靜態警告走勢;

  • FindBus Trend:歷史構建完之後的解決的代碼中FindBugs走勢。

4.3.2 構建狀態查詢

 當任務一旦運行,您將會看到這個任務正在隊列中的儀表板和當前工作主頁上運行。這兩種顯示如下。

 

一旦構建完成後,完成後的任務將會構建歷史列表顯示。

當然你可以在Jenkins控制面板上看到它,如下圖。

 

在上面展示的截圖中,您將注意到有兩個圖標描述當前作業的狀態。S欄目代表着最新構建狀態W欄目代表着構建穩定性Jenkins使用這兩個概念來介紹一個作業的總體狀況:

1構建狀態:

        下圖中分級符號概述了一個Job新近一次構建會產生的四種可能的狀態: 

  • Successful:完成構建,且被認爲是穩定的。

  • Unstable:完成構建,但被認爲不穩定。

  • Failed:構建失敗。

  • Disabled:構建已禁用。

2構建穩定性:

        當一個Job中構建已完成並生成了一個未發佈的目標構件,如果您準備評估此次構建的穩定性,Jenkins會基於一些後處理器任務爲構建發佈一個穩健指數 (0-100 ),這些任務一般以插件的方式實現。它們可能包括單元測試(JUnit)、覆蓋率(Cobertura )和靜態代碼分析(FindBugs)。分數越高,表明構建越穩定。下圖中分級符號概述了穩定性的評分範圍。任何構建作業的狀態(總分100)低於80分就是不穩定的。

當前作業主頁上還包含了一些有趣的條目。左側欄的鏈接主要控制Job的配置、刪除作業、構建作業。右邊部分的鏈接指向最新的項目報告和構件。

通過點擊構建歷史(Build History)中某個具體的構建鏈接,就能跳轉到Jenkins爲這個構建實例而創建的構建主頁上。如下圖

 如果你想通過視圖輸出界面來監控當前任務的進展情況。你可以單擊Console Output(控制檯輸出)。如

 果工作已完成,這將顯示構建腳本產生的靜態輸出;如果作業仍然在運行中,Jenkins將不斷刷新網頁的內容,以便您可以看到它運行時的輸出。如下圖:

五、常見錯誤處理

5.1 java.lang.UnsupportedClassVersionError

這是因爲jenkins和jdk版本不對應引起的。我這裏用的是jdk1.7,所以下載版本http://pkg.jenkins-ci.org/redhat/jenkins-2.33-1.1.noarch.rpm(jenkins下載地址:http://pkg.jenkins-ci.org/redhat/),   原先現在2.5版本以上,版本太高,啓動報“java.lang.UnsupportedClassVersionError”錯,所以要卸載之前安裝的jenkins-2.54-1.1.noarch,使用如下命令

5.2 command execution failed.Maybe you need to configure the job to choose one of your Ant installations?

控制檯輸出

Started by user admin

[EnvInject] - Loading node environment variables.

Building in workspace /home/jenkins/workspace/My_cache

Updating https://ip地址/svn/iptv/新業務/廣西開機廣告/code/ad-gx-cache at revision '2017-07-17T14:14:11.377 +0800'

Using sole credentials hehaitao/****** in realm ‘<https://ip地址:443> VisualSVN Server’

At revision 68144

No changes for https://ip地址/svn/iptv/%E6%96%B0%E4%B8%9A%E5%8A%A1/%E5%B9%BF%E8%A5%BF%E5%BC%80%E6%9C%BA%E5%B9%BF%E5%91%8A/code/ad-gx-cache since the previous build

[workspace] $ ant -file checkstyleBuild.xml -DBUILD_NUMBER=8

ERROR: command execution failed.Maybe you need to configure the job to choose one of your Ant installations?

[CHECKSTYLE] Skipping publisher since build result is FAILURE

[FINDBUGS] Skipping publisher since build result is FAILURE

 

Warning: you have no plugins providing access control for builds, so falling back to legacy behavior of permitting any downstream builds to be triggered

Finished: FAILURE

  這是由於沒有成功全局配置ant的環境變量沒有配置成功導致,請確保環境Ant環境變量配置成功,並且在Global Tool Configuration正確添加了Ant的路徑,這個可以參見2.23.4.2

5.3 JAVA_HOME is not defined correctly.

控制檯輸出

Started by user admin

[EnvInject] - Loading node environment variables.

Building in workspace /home/jenkins/workspace/My_cache

Updating https://ip地址/svn/iptv/新業務/廣西開機廣告/code/ad-gx-cache at revision '2017-07-17T15:33:26.714 +0800'

Using sole credentials hehaitao/****** in realm ‘<https://ip地址:443> VisualSVN Server’

At revision 68151

[workspace] $ /home/lutong/apache-ant-1.9.9/bin/ant -file checkstyleBuild.xml -DBUILD_NUMBER=11

Error: JAVA_HOME is not defined correctly.

  We cannot execute java

Build step 'Invoke Ant' marked build as failure

[CHECKSTYLE] Skipping publisher since build result is FAILURE

[FINDBUGS] Skipping publisher since build result is FAILURE

Warning: you have no plugins providing access control for builds, so falling back to legacy behavior of permitting any downstream builds to be triggered

Finished: FAILURE

 這是由於沒有成功全局配置JDK的環境變量沒有配置成功導致,請確保環境Ant環境變量配置成功,並且在Global Tool Configuration添加的JDK路徑正確,這個可以參見2.4.13.4.3

5.3 Unable to access the repository 

在配置“源碼管理”時,如果Credentials 不選擇或者選擇了驗證不正確,會出現這個錯誤,請參見3.4.44.2.3

5.4 cant create file

Checking out https://ip地址/svn/iptv/%E6%96%B0%E4%B8%9A%E5%8A%A1/%E5%B9%BF%E8%A5%BF%E5%BC%80%E6%9C%BA%E5%B9%BF%E5%91%8A/code/ad-gx-cache at revision '2017-07-17T17:46:17.618 +0800'

Using sole credentials hehaitao/****** in realm ‘<https://ip地址:443> VisualSVN Server’

ERROR: Failed to check out https://ip地址/svn/iptv/新業務/廣西開機廣告/code/ad-gx-cache

org.tmatesoft.svn.core.SVNException: svn: E204899: Cannot create new file '/home/jenkins/workspace/廣西開機廣告/.svn/lock': 權限不夠

No changes for https://ip地址/svn/iptv/%E6%96%B0%E4%B8%9A%E5%8A%A1/%E5%B9%BF%E8%A5%BF%E5%BC%80%E6%9C%BA%E5%B9%BF%E5%91%8A/code/ad-gx-cache since the previous build

  這是由於 項目廣西開機廣告目錄的權限不夠,使用“chmod777 /home/jenkins/workspace/廣西開機廣告 ”即可


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章