安裝Jenkins
系統(tǒng)環(huán)境:CentOS Linux release 7.3.1611 x86_64 GNU/Linux
安裝JDK
Jenkins是基于Java開發(fā)的持續(xù)集成系統(tǒng)(CI)丹擎,所以運(yùn)行環(huán)境必須安裝JDK郑临,安裝JDK的方法有很多種锥债,有些Linux系統(tǒng)可能會自帶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 官網(wǎng)下載地址,下載.rpm和.tar.g格式的安裝包都可以蜒犯,但是要注意jdk位數(shù)。
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后可能會遇到下面的錯誤屠升。
下載成功后潮改,上傳到服務(wù)器,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
···配置全局環(huán)境變量(所有用戶均可用)···
[root@JDu4e00u53f7 ~]# vi /etc/profile
添加如下內(nèi)容:JAVA_HOME根據(jù)實(shí)際目錄來
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可以查看安裝情況:
可能出現(xiàn)的錯誤信息:
bash:./java: cannot execute binary file
, 出現(xiàn)這個錯誤的可能原因是你在32位的操作系統(tǒng)上安裝了64位的JDK.
安裝Jenkins
Jenkins下載地址腹暖,推薦下載war包汇在,如果對版本沒特別要求,直接下載最新版本就好脏答。The lastest version 為2.86糕殉,以下所有的介紹和說明都是基于此版本,Jenkins迭代速度非持掣妫快阿蝶,若版本不同,頁面可能會有區(qū)別黄绩。
安裝Jenkins的方式有兩種 : 如果服務(wù)器上已安裝了Servlet容器羡洁,如Tomcat, 直接把war包放到webapps目錄下,然后啟動Tomcat就可以了爽丹;如果服務(wù)器沒有安裝Servlet容器筑煮,那也沒有關(guān)系,因?yàn)镴enkins的war包里內(nèi)置了Jetty习劫,只需運(yùn)行以下命令:
java -jar jenkins.war --httpPort=8080
--httpPort
用來指定Jenkins服務(wù)端口咆瘟,默認(rèn)8080 ,如果該端口已被占用,則可以用來更換端口诽里。運(yùn)行命令行后,當(dāng)在終端的啟動日志中看到這行信息時: INFO:Jenkins is fully up and running
, 代表Jenkins服務(wù)已經(jīng)啟動飞蛹。結(jié)合Linux nohup
和 &
命令谤狡,我們可以讓Jenkins服務(wù)永久的在服務(wù)器后臺運(yùn)行灸眼。
nohup java -jar jenkins.war --httpPort=8080 &
其中, nohup
用來不掛斷的運(yùn)行命令(即忽略掛起信號墓懂,永久執(zhí)行命令)焰宣, &
加在結(jié)尾來讓命令在后臺運(yùn)行,所以 nohup command &
的合起來使用的意思就是讓command 永久的在后臺執(zhí)行捕仔。
可通過Jobs命令查看后臺運(yùn)行任務(wù)匕积,如果想將某個程序調(diào)回前臺控制,只需要 fg + 編號
即可榜跌,此時如果要終止程序闪唆,只需Ctrl+C 即可退出程序。
[1]+ Running nohup java -jar jenkins.war --httpPort=8080 &
$ fg 1
nohup java -jar jenkins.war --httpPort=8080
Jenkins啟動成功后钓葫,剩下的配置工作將全部在瀏覽器中進(jìn)行悄蕾,十分方便。
配置Jenkins
在瀏覽器上輸入網(wǎng)址訪問Jenkins: http://IP:Port ,如:http://localhost:8080
解鎖服務(wù)
第一次啟動Jenkins時础浮,需要驗(yàn)證賬戶帆调。只需要在給出的文件路徑下將密碼拷貝一份到表單中即可驗(yàn)證完成。
$ cat /root/.jenkins/secrets/initialAdminPassword
Customize Jenkins
正常情況下豆同,會進(jìn)入安裝插件頁面番刊。點(diǎn)擊Install suggested plugins,安裝Jenkins建議安裝的插件影锈。
如果在進(jìn)入這一步時撵枢,遇到了Offline問題,沒有關(guān)系精居,這是由于你的Jenkins服務(wù)器沒有科學(xué)上網(wǎng)锄禽,點(diǎn)擊跳過插件安裝就好,后續(xù)我們可以自行安裝插件靴姿,詳見下文“安裝插件”部分的內(nèi)容沃但。
Create First Admin User
配置管理員用戶賬號/密碼,這個賬號密碼一定要保存好佛吓,不然補(bǔ)救措施比較麻煩宵晚。
補(bǔ)充:Jenkins的配置信息已經(jīng)插件都會放到 ~/.jenkins/
目錄下,這個也是Jenkins的主目錄吱型,它默認(rèn)是隱藏的逸贾。所以如果需要重新初始化安裝Jenkins ,只需要清理掉 ~/.jenkins
目錄即可。
關(guān)閉/重啟Jenkins
我們用jar -jar jenkins.war
來啟動jenkins服務(wù)器后,可以使用以下方法關(guān)閉或重啟Jenkins服務(wù)铝侵。
關(guān)閉Jenkins 服務(wù)
只需要在訪問Jenkins的url地址后加上exit灼伤,如http://localhost:8080/exit , 回車后會跳轉(zhuǎn)到以下頁面,點(diǎn)擊Retry using POST按鈕咪鲜,即可關(guān)閉Jenkins.
重啟Jenkins 服務(wù)
將上面的exit改為restart后就可以重新啟動jenkins服務(wù)器讼积。
重載Jenkins配置文件
將上面的restart改為reload就可以實(shí)現(xiàn)重新加載Jenkins配置信息厘惦。
安裝插件
Jenkins安裝插件時鸵鸥,既可以選擇在線安裝重窟,也可以離線安裝。
在線安裝
在線安裝首先要保證Jenkins服務(wù)器可以上網(wǎng)享郊。安裝方法為:點(diǎn)擊 ‘系統(tǒng)管理(Configure System)->插件管理(Manage Jenkins)览祖,選擇可選插件,搜索需要的插件后直接安裝即可拂蝎。
? 如果出現(xiàn)插件無法安裝或安裝失敗的情況穴墅,嘗試修改Jenkins配置文件(.jenkins/是隱藏目錄):
$ vi .jenkins/hudson.model.UpdateCenter.xml
把'https'修改為'http'后,重載Jenkins配置信息温自。
如果仍不能解決問題玄货,可能是Jenkins源的問題,可以嘗試換一個源碼悼泌,打開剛才的配置文件松捉,把URL換成
http://mirror.esuni.jp/jenkins/updates/update-center.json
,重啟Jenkins,查看是否可以成功安裝插件。
若以上方法都不能解決問題馆里,請嘗試插件離線安裝方法隘世。
離線安裝
首先下載所需的Jenkins插件, 然后打開:系統(tǒng)管理-插件管理-高級,點(diǎn)擊上傳插件鸠踪,選擇擴(kuò)展名為.hpi
的插件丙者。
離線安裝插件時评汰,可能會因?yàn)橐蕾嚾笔У膯栴}而導(dǎo)致安裝失敗纷捞。出現(xiàn)該種問題時,可以在Jenkins終端的輸出日志中找到依賴的插件被去,先安裝需要的依賴后主儡,再安裝插件。
由于是和rf集成惨缆,所以這里需要下載插件Robot Framework Plugin 糜值,插件介紹詳見Jenkins Wiki .
配置Slave
創(chuàng)建Slave
啟動Jenkin服務(wù)的這臺機(jī)器在Jenkins中被稱為Master丰捷,而其他連到Master上的機(jī)器(物理機(jī)或虛擬機(jī))被稱為Slave. Master/Slave相當(dāng)于 Server 和 Agent 的概念。Master 提供web接口讓用戶來管理 Job 和 Slave臀玄,Job 可以運(yùn)行在Master本機(jī)或者被分配到Slave上運(yùn)行瓢阴。一個Master可以關(guān)聯(lián)多個Slave用來為不同的Job或相同的Job的不同配置來服務(wù)畅蹂。
進(jìn)入系統(tǒng)管理->管理節(jié)點(diǎn)頁面點(diǎn)擊左側(cè)的新建節(jié)點(diǎn)健无,輸入節(jié)點(diǎn)名稱,并選擇固定代理(Dumb Slave)液斜,如果已經(jīng)添加過節(jié)點(diǎn)了累贤,也可以選擇復(fù)制現(xiàn)有節(jié)點(diǎn),It doesn't matter.
點(diǎn)擊OK后進(jìn)入有節(jié)點(diǎn)設(shè)置頁面少漆,此頁面上有一些配置項(xiàng)臼膏,概要說明如下。
-
并發(fā)構(gòu)建數(shù)(# of executors): 這個值控制著Jenkins并發(fā)構(gòu)建的數(shù)量示损,如果是UI測試的Job渗磅,最好只允許1個,其他的可以設(shè)置為多個检访;
遠(yuǎn)程工作目錄: 設(shè)置此節(jié)點(diǎn)遠(yuǎn)程工作目錄的路徑始鱼,在這個節(jié)點(diǎn)上運(yùn)行的Job都會保存到工作目錄里,此配置項(xiàng)必須設(shè)置脆贵;
-
標(biāo)簽:作用等同于robot framework中的tags, 可以設(shè)置Jobs只在特定的執(zhí)行機(jī)上運(yùn)行医清。如果指定固定的某個Slave,可能上面已經(jīng)有Job在運(yùn)行了卖氨,此時就要等待了会烙;但是如果有一批Slave使用同一個tag,只要此處配置Job要運(yùn)行到這個tag上筒捺,那么哪臺Slave空閑就會在哪臺機(jī)器上執(zhí)行柏腻。
-
用法: 控制Jenkins如何在這臺機(jī)器上安排構(gòu)建,只有兩個選項(xiàng)系吭;
啟動方式: 設(shè)置Jenkins Master如何啟動Slave agents五嫂,當(dāng)Job被分配到Slave上運(yùn)行的時候,此時Master和Slave其實(shí)是建立的雙向字節(jié)流的連接村斟。默認(rèn)情況下贫导,是沒有"通‘過Java web啟動代理"這一選項(xiàng)的,需要手動配置Jenkins蟆盹。
配置Jenkins使其支持通過Java web啟動代理的方法如下:
打開首頁-系統(tǒng)管理-全局安全配置(Configure Global Security)孩灯;
代理 - TCP port for JNLP agents設(shè)置為“隨機(jī)選取”;
-
點(diǎn)擊代理協(xié)議逾滥,勾選全部選項(xiàng)峰档;
-
Hidden security warnings中的Enable Agent需要打鉤選中败匹;
保存后,配置節(jié)點(diǎn)時就可以看到"通‘過Java web啟動代理" 這一選項(xiàng)了讥巡。
一般來說掀亩,選擇通過Java Web這種方式啟動Slave agents就可以了,這種方法需要你登錄到Slave機(jī)器欢顷,詳盡的啟動步驟后面會描述槽棍。若在Master上運(yùn)行cases,通常是隱藏進(jìn)程運(yùn)行的抬驴,這就導(dǎo)致如果我們的cases有UI層面的部分炼七,很大可能會運(yùn)行失敗,這樣的話我們就需要添加一個Slave節(jié)點(diǎn)來執(zhí)行布持。大多數(shù)實(shí)際應(yīng)用中豌拙,會有多臺機(jī)器需要加入Jenkins,所以添加Slave更是必不可少的题暖。
啟動Slave
在Slave列表頁可以看到按傅,剛才創(chuàng)建的Slave圖標(biāo)上有一個紅色的叉號,這代表當(dāng)前此Slave處于offline狀態(tài)胧卤。點(diǎn)擊Slave名稱唯绍,可以看到Jenkins給出了兩種啟動的方法,如下:
windows系統(tǒng)下灌侣,個人覺得第一種方法比較簡單推捐,點(diǎn)擊【Launch】,會下載一個名為 "Slave-agent.jnlp"的文件,然后雙擊該文件就可以啟動Slave了侧啼。
正常情況下牛柒,此時再去查看Slave列表,會發(fā)現(xiàn)圖標(biāo)上面的紅叉已經(jīng)消失了痊乾。
我的Slave節(jié)點(diǎn)的系統(tǒng)為win10皮壁,雙擊啟動文件時,會報以下錯誤:
這個問題可能是由于工作目錄丟失引起的哪审,需要你在Slave遠(yuǎn)程工作目錄下新建一個名為remoting的文件夾就可以正常啟動了蛾魄。
配置 Job
在Jenkins首頁的左側(cè)菜單欄,點(diǎn)擊新建任務(wù)湿滓,輸入一個任務(wù)名稱滴须,并選擇“構(gòu)建一個自由風(fēng)格的軟件項(xiàng)目”,點(diǎn)擊確定進(jìn)入配置Job頁面叽奥。
配置Job頁面分為六個部分扔水,分別為General,源碼管理,構(gòu)建觸發(fā)器朝氓,構(gòu)建環(huán)境魔市,構(gòu)建主届,構(gòu)建后操作,下面將會對這幾部分的內(nèi)容分別進(jìn)行簡要的說明待德。
General
- 丟棄舊的構(gòu)建
-
參數(shù)化構(gòu)建過程
此處可以設(shè)置增加一些不同類型的參數(shù)涧偷,在構(gòu)建時通過修改這些參數(shù)的值簸喂,來方便的改動一些配置毙死。比如說用來打包APP的 Job燎潮,就可以加上版本號、環(huán)境等參數(shù)扼倘,在運(yùn)行Jobs時簡單的修改參數(shù)值确封,就可以打出指定的版本號和環(huán)境等滿足條件的安裝包。
-
關(guān)閉構(gòu)建
選中此項(xiàng)后再菊,將不會執(zhí)行此項(xiàng)目的新構(gòu)建爪喘,這在某些情況下可能會很有用。
-
在必要的時候并發(fā)構(gòu)建
選中此項(xiàng)后纠拔,當(dāng)此項(xiàng)目有多個構(gòu)建任務(wù)時可以并發(fā)執(zhí)行秉剑。默認(rèn)情況下,Jenkins默認(rèn)是串行構(gòu)建任務(wù)的稠诲,其他任何開始構(gòu)建項(xiàng)目的請求都將保留在構(gòu)建隊(duì)列中侦鹏,直到第一個構(gòu)建完成為止。
-
限制項(xiàng)目的運(yùn)行節(jié)點(diǎn)
選中此項(xiàng)后臀叙,需要輸入一個標(biāo)簽表達(dá)式作為參數(shù)略水,意為指定當(dāng)前Job只能在指定的Slave上執(zhí)行。前面介紹Slave的時候也提到了標(biāo)簽劝萤,我推薦使用標(biāo)簽渊涝。因?yàn)槿绻苯邮褂肧lave名稱的話,可能會在Job比較多的時候造成擁堵床嫌,而使用標(biāo)簽后跨释,只要是帶有這個標(biāo)簽的Slave,哪個空閑就會安排那個執(zhí)行厌处,這樣可以使資源充分利用鳖谈,提高效率。
源碼管理
Job中配置源碼管理的前提是Jenkins服務(wù)器已經(jīng)安裝了對應(yīng)的源碼管理工具嘱蛋。Jenkins有很多種源碼管理工具可以選擇蚯姆,但是需要下載響應(yīng)的插件才可以五续,比如git,則需要安裝Git client plugin 和 Git plugin插件龄恋。
其實(shí)疙驾,此處沒有設(shè)置版本管理工具也不是不行,這樣的話就需要手動去做更新的動作郭毕,加大了人力成本它碎,Jenkins也不推薦這樣做。如果大家的Cases使用了版本管理显押,這樣在Cases更新后扳肛,Job就會自動Fetch最新的代碼來運(yùn)行,十分方便乘碑。
SVN(Subversion)
Repository URL :SVN庫的地址挖息;
Credentials: 證書設(shè)置,點(diǎn)擊查看具體步驟;
Local module directory : 指定一個本地目錄作為SVN檢出到本地路徑兽肤,可以為空套腹。
Repository depth:需要檢出的文件夾深度,默認(rèn)設(shè)置為infinity(無窮大)资铡;
這幾個配置好了电禀,基本上就可以使用了。如果有多個不同的SVN庫要檢出的話笤休,可以點(diǎn)擊"Add moudle"來添加新的配置尖飞。
Git
Git的配置比較簡單,只需要配置好Repository URL(Git庫地址)店雅,Credentials(證書)政基,并選擇一個分支就可以了。
構(gòu)建觸發(fā)器
可以手動來觸發(fā)一個構(gòu)建底洗,也可以通過觸發(fā)器來自動構(gòu)建腋么,這里的設(shè)置需要根據(jù)項(xiàng)目情況自行考慮設(shè)置。設(shè)置構(gòu)建觸發(fā)器時亥揖,支持同時設(shè)置多個不同類型的觸發(fā)器珊擂;
-
Build after other projects are built
這個選項(xiàng)是在其他Job構(gòu)建之后,觸發(fā)當(dāng)前項(xiàng)目構(gòu)建费变。在構(gòu)建后操作中也有一個"Build other projects"選項(xiàng)摧扇,作用其實(shí)和這邊是一樣的。區(qū)別就在于挚歧,在此處配置扛稽,則當(dāng)前Job是被觸發(fā)的對象,而在構(gòu)建后操作配置滑负,則當(dāng)前項(xiàng)目就是觸發(fā)者在张;
?
前面提到的"自動編譯打包→自動部署→單元測試/代碼掃描→自動測試"這一套流程用含,就是通過在這個地方進(jìn)行配置的。對于自動化測試的Job來說帮匾,如果前面的Job沒有構(gòu)建成功啄骇,這里再構(gòu)建也沒什么必要,所以此處的可以選擇"只在構(gòu)建穩(wěn)定時觸發(fā)"瘟斜;
-
Build periodically
此選項(xiàng)需要配置一個時間表達(dá)式缸夹,讓Job在滿足時間表達(dá)式的情況下執(zhí)行構(gòu)建,此處的語法遵循Linux cron服務(wù)的時間表達(dá)式語法(但有細(xì)微差別)螺句,并會自動檢測語法正確性虽惭。點(diǎn)擊文本框右邊的問號就可以看到語法的幫助說明。
-
Poll SCM
Poll SCM 這里配置的時間表達(dá)式和前一個是完全一樣的蛇尚,只不過這個選項(xiàng)是只有在檢測到版本庫有更新時芽唇,才會觸發(fā)執(zhí)行。如果版本庫沒有更新佣蓉,即使?jié)M足了時間表達(dá)式披摄,也不會觸發(fā)Job的構(gòu)建。
-
觸發(fā)遠(yuǎn)程構(gòu)建
?PASS.
構(gòu)建
這里可以選擇增加構(gòu)建步驟勇凭,如果Slave是Windows系統(tǒng),建議選擇"Execute Windows batch command"來執(zhí)行dos命令進(jìn)行構(gòu)建义辕,其他平臺虾标,如Linux,可以選擇"Execute shell"灌砖,如果項(xiàng)目集成了Ant或Maven,也可以選擇對應(yīng)的選項(xiàng)璧函。
pybot完整的命令行參數(shù),可以在cmd下輸入pybot --help
查看基显。
構(gòu)建后操作
構(gòu)建后操作可選的項(xiàng)同樣有很多蘸吓,根據(jù)用戶安裝的不同插件,可以實(shí)現(xiàn)不同的需求撩幽,如分析測試結(jié)果库继,發(fā)送郵件通知等。
由于我們的Jobs是和rf集成, 所以我們要增加構(gòu)建后的步驟是Publishes Robot Framework test results
窜醉, 只有安裝了Robot Framework Plugin 插件才會出現(xiàn)該選項(xiàng)宪萄,界面如下所示:
Directory of Robot output 可以為空,如果前面的pybot命令使用參數(shù)-d
指定了輸出目錄榨惰,那么這里也必須要進(jìn)行設(shè)置拜英,否則插件找不到output.xml文件,也就無法解析結(jié)果了琅催。所以這里設(shè)置的路徑是RF運(yùn)行后產(chǎn)生的xml和html文件所在的目錄居凶。
Directory of Robot output 用來設(shè)置臨界值虫给,一般都設(shè)置為100%,表示只要有案例運(yùn)行失敗侠碧,則Job的狀態(tài)就是unstable. 此參數(shù)的介紹如下:
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...】
參考文檔
linux下利用nohup后臺運(yùn)行jar文件包程序 棋蚌,一汪清水
用Jenkins構(gòu)建一個新工程,我們一起試一下 挨队,幕客老師
Jenkins-持續(xù)集成平臺(安裝篇) 谷暮,幕客老師
Jenkins入門系列之——01第一章 Jenkins是什么? ,wangmm0218
Jenkins Master/Slave架構(gòu), iTech
基于jenkins搭建一個持續(xù)集成服務(wù)器盛垦,YaiHo
Jenkins常用插件說明(持續(xù)更新) ,小學(xué)徒V
Jenkins使用教程之關(guān)聯(lián)節(jié)點(diǎn) 湿弦,MR_Hanjc
Jenkins 2.19.4默認(rèn)沒有Launch agent via Java Web Start,可通過以下來設(shè)置: , jgw2008
jenkins Error performing command: git ls-remote -h , wangfei0904306
Jenkins入門總結(jié) ,iTech
Robot Framework自動化測試修煉寶典[書],齊濤 著
配置Jenkins郵件通知, 鄧布利多·雪?