1. 程式人生 > >從零搭建Robot Framework+Jenkins持續整合環境

從零搭建Robot Framework+Jenkins持續整合環境

安裝Jenkins

系統環境:CentOS Linux release 7.3.1611 x86_64 GNU/Linux

安裝JDK

Jenkins是基於Java開發的持續整合系統(CI),所以執行環境必須安裝JDK,安裝JDK的方法有很多種,有些Linux系統可能會自帶openjdk,需要注意的是較新版本的jenkins並不支援低版本的JDK.

[root@JDu4e00u53f7 ~]# java --version
java version "1.7.0_131"
OpenJDK Runtime Environment (rhel-2.6.9.0.el6_8-x86_64 u131-b00)

如果命令的輸出如上,則這需要先解除安裝自帶的低版本openjdk,然後手動安裝sunjdk,sunJDK1.8 官網下載地址,下載.rpm和.tar.g格式的安裝包都可以,但是要注意jdk位數。

jdk-8u11-linux-x64.tar.gz百度雲 密碼: 7kxw

我在安裝的時候,遇到了一個坑,截至到目前,JDK最新版本為9.0.1,但是Jenkins最新版本v2.86並不支援JDK 9。官方說明如下:

Jenkins packages (deb IIRC) declared a Java 7+ dependency, in some configurations that resulted in Java 9 being downloaded.We no longer declare Java dependencies for that reason, as Jenkins does not work with Java 9.

使用JDK9,安裝Jenkins後可能會遇到下面的錯誤。

下載成功後,上傳到伺服器,JDK安裝步驟如下:

[root@JDu4e00u53f7 ~]# cd ~
[root@JDu4e00u53f7 ~]# mkdir /usr/java
[root@JDu4e00u53f7 ~]# mv jdk-8u11-linux-x64.tar.gz /usr/java/
[root@JDu4e00u53f7 ~]# tar -zxvf jdk-8u11-linux-x64.tar.gz 

···配置全域性環境變數(所有使用者均可用)···
[root@JDu4e00u53f7 ~]# vi /etc/profile
新增如下內容:JAVA_HOME根據實際目錄來 export JAVA_HOME=/usr/java/jdk1.8.0_11 export JRE_HOME=/usr/java/jdk1.8.0_11/jre export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME:$PATH ···過載配置檔案··· [root@JDu4e00u53f7 ~]# source /etc/profile

安裝完成後使用java - -version可以檢視安裝情況:

可能出現的錯誤資訊:bash:./java: cannot execute binary file , 出現這個錯誤的可能原因是你在32位的作業系統上安裝了64位的JDK.

安裝Jenkins

Jenkins下載地址,推薦下載war包,如果對版本沒特別要求,直接下載最新版本就好。The lastest version 為2.86,以下所有的介紹和說明都是基於此版本,Jenkins迭代速度非常快,若版本不同,頁面可能會有區別。Jenkins release

安裝Jenkins的方式有兩種 : 如果伺服器上已安裝了Servlet容器,如Tomcat, 直接把war包放到webapps目錄下,然後啟動Tomcat就可以了;如果伺服器沒有安裝Servlet容器,那也沒有關係,因為Jenkins的war包裡內建了Jetty,只需執行以下命令:
java -jar jenkins.war --httpPort=8080
--httpPort用來指定Jenkins服務埠,預設8080 ,如果該埠已被佔用,則可以用來更換埠。執行命令列後,當在終端的啟動日誌中看到這行資訊時: INFO:Jenkins is fully up and running, 代表Jenkins服務已經啟動。

結合Linux nohup& 命令,我們可以讓Jenkins服務永久的在伺服器後臺執行。
nohup java -jar jenkins.war --httpPort=8080 &
其中, nohup用來不掛斷的執行命令(即忽略掛起訊號,永久執行命令), & 加在結尾來讓命令在後臺執行,所以 nohup command & 的合起來使用的意思就是讓command 永久的在後臺執行。

可通過Jobs命令檢視後臺執行任務,如果想將某個程式調回前臺控制,只需要 fg + 編號 即可,此時如果要終止程式,只需Ctrl+C 即可退出程式。

[1]+  Running         nohup java -jar jenkins.war --httpPort=8080 &

$ fg 1
nohup java -jar jenkins.war --httpPort=8080

Jenkins啟動成功後,剩下的配置工作將全部在瀏覽器中進行,十分方便。

配置Jenkins

在瀏覽器上輸入網址訪問Jenkins: http://IP:Port ,如:http://localhost:8080

解鎖服務

第一次啟動Jenkins時,需要驗證賬戶。只需要在給出的檔案路徑下將密碼拷貝一份到表單中即可驗證完成。
$ cat /root/.jenkins/secrets/initialAdminPassword
image

Customize Jenkins

正常情況下,會進入安裝外掛頁面。點選Install suggested plugins,安裝Jenkins建議安裝的外掛。

image

image

如果在進入這一步時,遇到了Offline問題,沒有關係,這是由於你的Jenkins伺服器沒有科學上網,點選跳過外掛安裝就好,後續我們可以自行安裝外掛,詳見下文“安裝外掛”部分的內容。

image

Create First Admin User

配置管理員使用者賬號/密碼,這個賬號密碼一定要儲存好,不然補救措施比較麻煩。

image

完成確認後,點選Start using Jenkins,進入Jenkins使用頁面!image

補充:Jenkins的配置資訊已經外掛都會放到 ~/.jenkins/ 目錄下,這個也是Jenkins的主目錄,它預設是隱藏的。所以如果需要重新初始化安裝Jenkins ,只需要清理掉 ~/.jenkins目錄即可。

image

關閉/重啟Jenkins

我們用jar -jar jenkins.war 來啟動jenkins伺服器後,可以使用以下方法關閉或重啟Jenkins服務。

關閉Jenkins 服務

只需要在訪問Jenkins的url地址後加上exit,如http://localhost:8080/exit , 回車後會跳轉到以下頁面,點選Retry using POST按鈕,即可關閉Jenkins.

image

重啟Jenkins 服務

將上面的exit改為restart後就可以重新啟動jenkins伺服器。

過載Jenkins配置檔案

將上面的restart改為reload就可以實現重新載入Jenkins配置資訊。

安裝外掛

Jenkins安裝外掛時,既可以選擇線上安裝,也可以離線安裝。

線上安裝

線上安裝首先要保證Jenkins伺服器可以上網。安裝方法為:點選 ‘系統管理(Configure System)->外掛管理(Manage Jenkins),選擇可選外掛,搜尋需要的外掛後直接安裝即可。

image

image

​ 如果出現外掛無法安裝或安裝失敗的情況,嘗試修改Jenkins配置檔案(.jenkins/是隱藏目錄):
$ vi .jenkins/hudson.model.UpdateCenter.xml

把’https’修改為’http’後,過載Jenkins配置資訊。image
如果仍不能解決問題,可能是Jenkins源的問題,可以嘗試換一個原始碼,開啟剛才的配置檔案,把URL換成http://mirror.esuni.jp/jenkins/updates/update-center.json ,重啟Jenkins,檢視是否可以成功安裝外掛。

若以上方法都不能解決問題,請嘗試外掛離線安裝方法。

離線安裝

首先下載所需的Jenkins外掛, 然後開啟:系統管理-外掛管理-高階,點選上傳外掛,選擇副檔名為.hpi的外掛。

image 上傳成功後,外掛自動安裝。安裝成功後,重啟Jenkins後生效。

image 離線安裝外掛時,可能會因為依賴缺失的問題而導致安裝失敗。出現該種問題時,可以在Jenkins終端的輸出日誌中找到依賴的外掛,先安裝需要的依賴後,再安裝外掛。

由於是和rf整合,所以這裡需要下載外掛Robot Framework Plugin ,外掛介紹詳見Jenkins Wiki .

image

配置Slave

建立Slave

啟動Jenkin服務的這臺機器在Jenkins中被稱為Master,而其他連到Master上的機器(物理機或虛擬機器)被稱為Slave. Master/Slave相當於 Server 和 Agent 的概念。Master 提供web介面讓使用者來管理 Job 和 Slave,Job 可以執行在Master本機或者被分配到Slave上執行。一個Master可以關聯多個Slave用來為不同的Job或相同的Job的不同配置來服務。

image

進入系統管理->管理節點頁面點選左側的新建節點,輸入節點名稱,並選擇固定代理(Dumb Slave),如果已經新增過節點了,也可以選擇複製現有節點,It doesn’t matter.

image

點選OK後進入有節點設定頁面,此頁面上有一些配置項,概要說明如下。

image

  • 併發構建數(# of executors): 這個值控制著Jenkins併發構建的數量,如果是UI測試的Job,最好只允許1個,其他的可以設定為多個;

    image

  • 遠端工作目錄: 設定此節點遠端工作目錄的路徑,在這個節點上執行的Job都會儲存到工作目錄裡,此配置項必須設定;

image

  • 標籤:作用等同於robot framework中的tags, 可以設定Jobs只在特定的執行機上執行。如果指定固定的某個Slave,可能上面已經有Job在運行了,此時就要等待了;但是如果有一批Slave使用同一個tag,只要此處配置Job要執行到這個tag上,那麼哪臺Slave空閒就會在哪臺機器上執行。

    image

  • 用法: 控制Jenkins如何在這臺機器上安排構建,只有兩個選項;

    image

  • 啟動方式: 設定Jenkins Master如何啟動Slave agents,當Job被分配到Slave上執行的時候,此時Master和Slave其實是建立的雙向位元組流的連線。預設情況下,是沒有”通‘過Java web啟動代理”這一選項的,需要手動配置Jenkins。

image

配置Jenkins使其支援通過Java web啟動代理的方法如下:

  1. 開啟首頁-系統管理-全域性安全配置(Configure Global Security);

  2. 代理 - TCP port for JNLP agents設定為“隨機選取”;

image

  1. 點選代理協議,勾選全部選項;

    image

  2. Hidden security warnings中的Enable Agent需要打鉤選中;

    image

儲存後,配置節點時就可以看到”通‘過Java web啟動代理” 這一選項了。

一般來說,選擇通過Java Web這種方式啟動Slave agents就可以了,這種方法需要你登入到Slave機器,詳盡的啟動步驟後面會描述。若在Master上執行cases,通常是隱藏程序執行的,這就導致如果我們的cases有UI層面的部分,很大可能會執行失敗,這樣的話我們就需要新增一個Slave節點來執行。大多數實際應用中,會有多臺機器需要加入Jenkins,所以新增Slave更是必不可少的。

啟動Slave

在Slave列表頁可以看到,剛才建立的Slave圖示上有一個紅色的叉號,這代表當前此Slave處於offline狀態。點選Slave名稱,可以看到Jenkins給出了兩種啟動的方法,如下:

image

windows系統下,個人覺得第一種方法比較簡單,點選【Launch】,會下載一個名為 “Slave-agent.jnlp”的檔案,然後雙擊該檔案就可以啟動Slave了。

image

正常情況下,此時再去檢視Slave列表,會發現圖示上面的紅叉已經消失了。

image

我的Slave節點的系統為win10,雙擊啟動檔案時,會報以下錯誤:

image

這個問題可能是由於工作目錄丟失引起的,需要你在Slave遠端工作目錄下新建一個名為remoting的資料夾就可以正常啟動了。

配置 Job

在Jenkins首頁的左側選單欄,點選新建任務,輸入一個任務名稱,並選擇“構建一個自由風格的軟體專案”,點選確定進入配置Job頁面。

image

配置Job頁面分為六個部分,分別為General,原始碼管理,構建觸發器,構建環境,構建,構建後操作,下面將會對這幾部分的內容分別進行簡要的說明。

General

  • 丟棄舊的構建

因為每構建一次Job都會有記錄,如果構建次數很多,也可能會佔用很多硬碟資源。因此,這個設定就是可以讓我們控制丟棄舊的構建。image

  • 引數化構建過程

    此處可以設定增加一些不同型別的引數,在構建時通過修改這些引數的值,來方便的改動一些配置。比如說用來打包APP的 Job,就可以加上版本號、環境等引數,在執行Jobs時簡單的修改引數值,就可以打出指定的版本號和環境等滿足條件的安裝包。

    image

  • 關閉構建

    選中此項後,將不會執行此專案的新構建,這在某些情況下可能會很有用。

  • 在必要的時候併發構建

    選中此項後,當此專案有多個構建任務時可以併發執行。預設情況下,Jenkins預設是序列構建任務的,其他任何開始構建專案的請求都將保留在構建佇列中,直到第一個構建完成為止。

  • 限制專案的執行節點

    選中此項後,需要輸入一個標籤表示式作為引數,意為指定當前Job只能在指定的Slave上執行。前面介紹Slave的時候也提到了標籤,我推薦使用標籤。因為如果直接使用Slave名稱的話,可能會在Job比較多的時候造成擁堵,而使用標籤後,只要是帶有這個標籤的Slave,哪個空閒就會安排那個執行,這樣可以使資源充分利用,提高效率。

原始碼管理

Job中配置原始碼管理的前提是Jenkins伺服器已經安裝了對應的原始碼管理工具。Jenkins有很多種原始碼管理工具可以選擇,但是需要下載響應的外掛才可以,比如git,則需要安裝Git client plugin 和 Git plugin外掛。

image

其實,此處沒有設定版本管理工具也不是不行,這樣的話就需要手動去做更新的動作,加大了人力成本,Jenkins也不推薦這樣做。如果大家的Cases使用了版本管理,這樣在Cases更新後,Job就會自動Fetch最新的程式碼來執行,十分方便。

SVN(Subversion)

image

  • Repository URL :SVN庫的地址;

  • Credentials: 證書設定,點選檢視具體步驟;

  • Local module directory : 指定一個本地目錄作為SVN檢出到本地路徑,可以為空。

  • Repository depth:需要檢出的資料夾深度,預設設定為infinity(無窮大);

這幾個配置好了,基本上就可以使用了。如果有多個不同的SVN庫要檢出的話,可以點選”Add moudle”來新增新的配置。

Git

Git的配置比較簡單,只需要配置好Repository URL(Git庫地址),Credentials(證書),並選擇一個分支就可以了。

image

構建觸發器

可以手動來觸發一個構建,也可以通過觸發器來自動構建,這裡的設定需要根據專案情況自行考慮設定。設定構建觸發器時,支援同時設定多個不同型別的觸發器;

  • Build after other projects are built

    這個選項是在其他Job構建之後,觸發當前專案構建。在構建後操作中也有一個”Build other projects”選項,作用其實和這邊是一樣的。區別就在於,在此處配置,則當前Job是被觸發的物件,而在構建後操作配置,則當前專案就是觸發者;

    image

    前面提到的”自動編譯打包→自動部署→單元測試/程式碼掃描→自動測試”這一套流程,就是通過在這個地方進行配置的。對於自動化測試的Job來說,如果前面的Job沒有構建成功,這裡再構建也沒什麼必要,所以此處的可以選擇”只在構建穩定時觸發”;

  • Build periodically

    此選項需要配置一個時間表達式,讓Job在滿足時間表達式的情況下執行構建,此處的語法遵循Linux cron服務的時間表達式語法(但有細微差別),並會自動檢測語法正確性。點選文字框右邊的問號就可以看到語法的幫助說明。

    image

  • Poll SCM

    Poll SCM 這裡配置的時間表達式和前一個是完全一樣的,只不過這個選項是隻有在檢測到版本庫有更新時,才會觸發執行。如果版本庫沒有更新,即使滿足了時間表達式,也不會觸發Job的構建。

  • 觸發遠端構建

    ​PASS.

構建

這裡可以選擇增加構建步驟,如果Slave是Windows系統,建議選擇”Execute Windows batch command”來執行dos命令進行構建,其他平臺,如Linux,可以選擇”Execute shell”,如果專案集成了Ant或Maven,也可以選擇對應的選項。

pybot完整的命令列引數,可以在cmd下輸入pybot --help檢視。

image

構建後操作

構建後操作可選的項同樣有很多,根據使用者安裝的不同外掛,可以實現不同的需求,如分析測試結果,傳送郵件通知等。

由於我們的Jobs是和rf整合, 所以我們要增加構建後的步驟是Publishes Robot Framework test results, 只有安裝了Robot Framework Plugin 外掛才會出現該選項,介面如下所示:

image

Directory of Robot output 可以為空,如果前面的pybot命令使用引數-d 指定了輸出目錄,那麼這裡也必須要進行設定,否則外掛找不到output.xml檔案,也就無法解析結果了。所以這裡設定的路徑是RF執行後產生的xml和html檔案所在的目錄。

Directory of Robot output 用來設定臨界值,一般都設定為100%,表示只要有案例執行失敗,則Job的狀態就是unstable. 此引數的介紹如下:

Specify thresholds for marking a build unstable or passed. Thresholds are expressed in percentage of tests that passed compared to total amount of tests run. Builds with pass percentage under the blue threshold wild be marked unstable and pass percentage under yellow threshold will yield a failed build.

If “Use thresholds for critical tests only” is selected thresholds will be compared to the pass ratio of critical tests instead of all tests.

配置Jenkins郵件通知

Jenkins本身自帶的郵件通知功能較弱,我們可以通過下載’Email Extension Plugin” 外掛來自定義更高階的郵件通知功能。

具體配置步驟,請參照:https://zhuanlan.zhihu.com/p/22810691

【To be continued…】

參考文件

  1. 使用Jenkins進行持續整合, 廖雪峰

  2. linux下利用nohup後臺執行jar檔案包程式 ,一汪清水

  3. 用Jenkins構建一個新工程,我們一起試一下 ,幕客老師

  4. Jenkins-持續整合平臺(安裝篇) ,幕客老師

  5. Jenkins入門系列之——01第一章 Jenkins是什麼? ,wangmm0218

  6. Jenkins Master/Slave架構, iTech

  7. Jenkins Guided Tour

  8. 基於jenkins搭建一個持續整合伺服器,YaiHo

  9. Jenkins常用外掛說明(持續更新) ,小學徒V

  10. Jenkins使用教程之關聯節點 ,MR_Hanjc

  11. Jenkins 2.19.4預設沒有Launch agent via Java Web Start,可通過以下來設定: , jgw2008

  12. jenkins Error performing command: git ls-remote -h , wangfei0904306

  13. Jenkins入門總結 ,iTech

  14. Robot Framework自動化測試修煉寶典[書],齊濤 著

  15. Jenkins的Credentials(證書)管理 ,張偵毅

  16. 配置Jenkins郵件通知, 鄧布利多·雪​