1.持續(xù)集成
1.1持續(xù)集成的定義
持續(xù)集成是一種軟件開發(fā)實踐,即團(tuán)隊開發(fā)成員經(jīng)常集成它們的工作鞭光,通過每個成員每天至少集成一次氧敢,也就意味著每天可能會發(fā)生多次集成啰脚。每次集成都通過自動化的構(gòu)建(包括編譯庆冕,發(fā)布康吵,自動化測試)來驗證,從而盡早地發(fā)現(xiàn)集成錯誤访递。
1.2持續(xù)集成的價值
持續(xù)集成的核心價值在于:
- 1.持續(xù)集成中的任何一個環(huán)節(jié)都是自動完成的晦嵌,無需太多的人工干預(yù),有利于減少重復(fù)過程以節(jié)省時間力九、費(fèi)用和工作量耍铜;
- 2.持續(xù)集成保障了每個時間點上團(tuán)隊成員提交的代碼是能成功集成的。換言之跌前,任何時間點都能第一時間發(fā)現(xiàn)軟件的集成問題,使任意時間發(fā)布可部署的軟件成為了可能陡舅;
- 3.持續(xù)集成還能利于軟件本身的發(fā)展趨勢抵乓,這點在需求不明確或是頻繁性變更的情景中尤其重要,持續(xù)集成的質(zhì)量能幫助團(tuán)隊進(jìn)行有效決策靶衍,同時建立團(tuán)隊對開發(fā)產(chǎn)品的信心灾炭。
1.3持續(xù)集成的原則
業(yè)界普遍認(rèn)同的持續(xù)集成的原則包括:
- 需要版本控制軟件保障團(tuán)隊成員提交的代碼不會導(dǎo)致集成失敗。常用的版本控制軟件有 IBM Rational ClearCase颅眶、CVS蜈出、Subversion 等瑟啃;
- 開發(fā)人員必須及時向版本控制庫中提交代碼矩肩,也必須經(jīng)常性地從版本控制庫中更新代碼到本地;
- 需要有專門的集成服務(wù)器來執(zhí)行集成構(gòu)建由捎。根據(jù)項目的具體實際商叹,集成構(gòu)建可以被軟件的修改來直接觸發(fā)燕刻,也可以定時啟動,如每半個小時構(gòu)建一次剖笙;
- 4.必須保證構(gòu)建的成功卵洗。如果構(gòu)建失敗,修復(fù)構(gòu)建過程中的錯誤是優(yōu)先級最高的工作弥咪。一旦修復(fù)过蹂,需要手動啟動一次構(gòu)建十绑。
1.4持續(xù)集成系統(tǒng)的組成
由此可見,一個完整的構(gòu)建系統(tǒng)必須包括:
- 一個自動構(gòu)建過程酷勺,包括自動編譯孽惰、分發(fā)、部署和測試等鸥印。
- 一個代碼存儲庫勋功,即需要版本控制軟件來保障代碼的可維護(hù)性,同時作為構(gòu)建過程的素材庫库说。
- 一個持續(xù)集成服務(wù)器狂鞋。本文中介紹的 Jenkins 就是一個配置簡單和使用方便的持續(xù)集成服務(wù)器。
2.Jenkins介紹
2.1文字介紹
Jenkins是一個廣泛用于持續(xù)構(gòu)建的可視化web工具潜的,持續(xù)構(gòu)建說得更直白點骚揍,就是各種項目的"自動化"編譯、打包啰挪、分發(fā)部署信不。jenkins可以很好的支持各種語言(比如:JavaScript、java, c#, php等)的項目構(gòu)建亡呵,也完全兼容grunt抽活、ant、maven锰什、gradle等多種第三方構(gòu)建工具下硕,同時跟svn、git能無縫集成汁胆,也支持直接與知名源代碼托管網(wǎng)站梭姓,比如github、bitbucket直接集成嫩码。
2.2工作流程圖
從圖片上看誉尖,其實Jenkins就是一個將以前人工打包、上傳铸题、發(fā)布操作通過各種插件等集成到可視化的web頁面上一個工具铡恕。
2.1 從git等倉庫中拉取代碼(拉取后的代碼可以在Jenkins的工作空間中找到)
2.2 Jenkins調(diào)用第三方插件 如Shell 運(yùn)行指定命令
2.3 調(diào)用服務(wù)器上已經(jīng)安裝的打包插件如grunt將代碼打包。
2.4 使用SSH命令將打包好的代碼上傳到發(fā)布服務(wù)器上
2.5 使用SSH命令將上傳好的代碼發(fā)布到代碼服務(wù)器
2.3 Jenkins 安裝和啟動
安裝Jenkins:
- 本人安裝的是jenkins-2.60.1.msi安裝版回挽,也可自行選擇安裝Jenkins其他版本没咙;
Jenkins下載地址
- 本人安裝的是jenkins-2.60.1.msi安裝版回挽,也可自行選擇安裝Jenkins其他版本没咙;
- 雙擊jenkins.msi啟動安裝,安裝目錄選擇D:\Progrom Files\Jenkins千劈,然后啟動成功祭刚。
-
Jenkins服務(wù)默認(rèn)端口為8080,如與其他服務(wù)沖突,可在..\Jenkins\jenkins.xml中修改默認(rèn)端口涡驮,如我這里修改為--httpPort=7033暗甥;
-
- Jenkins服務(wù)默認(rèn)是自動啟動的,如果想修改為手動啟動捉捅,請自行管理->服務(wù)撤防,找到Jenkins服務(wù),修改為手動啟動即可棒口。
2.4Jenkins添加項目和具體配置
2.4.1安裝插件
Jenkins的很多功能都需要依賴于現(xiàn)有的插件寄月,比如git倉庫下代碼拉取、SSH命令的運(yùn)行无牵。Jenkins第一次啟動的時候會推薦你安裝默認(rèn)的插件漾肮,建議將推薦的插件都安裝。
下面我以安裝Multiple SCMs Plugin 這個插件為例茎毁, Multiple SCMs Plugin 這個插件可以讓你的項目拉取多個倉庫代碼克懊。 比如你的發(fā)布項目需要將多個倉庫下代碼進(jìn)行打包。
安裝截圖:
安裝完成后截圖:
2.4.2Jenkins具體配置
一.還是先從截圖看具體的配置界面然后一一解析具體功能
General 通用配置七蜘,可以添加項目名稱谭溉、項目描述。和構(gòu)建過程中使用的參數(shù)橡卤。
參數(shù)化構(gòu)建過程這個選項比較重要扮念,它主要是讓你可以根據(jù)自己的配置參數(shù),去拉取指定分支代碼或者運(yùn)行不同的shell腳本來達(dá)到比如發(fā)布到不同的服務(wù)器上的邏輯蒜魄,打包邏輯化扔亥。
二、源代碼管理
配置git倉庫地址谈为。
${branch_project} 指定的就是你從倉庫中拉取指定分支的代碼,這個可以在前面的構(gòu)建化使用參數(shù)中配置踢关。
Mutiple SCMs 是Jenkins的一個插件伞鲫,主要解決一次發(fā)布需要拉取多個倉庫代碼,比如你想從拉取A項目并且在A項目的子文件夾asset/src/h5中拉取B項目的代碼放于文件夾asset/src/h5中签舞。就要使用這個插件秕脓。
而Additional Behaviours 項的配置是解決拉取兩個項目同時,B項目必須放到到A項目的asset/src/h5中儒搭。
三吠架、構(gòu)建觸發(fā)器
根據(jù)你自己的情況去選擇,比如你可以配置當(dāng)git每次提交時就去打包搂鲫。
四傍药、構(gòu)建觸發(fā)器
根據(jù)你自己的情況去選擇,比如是否配置每次build時去清空工作空間。
五拐辽、構(gòu)建
增加構(gòu)建步驟添加你的具體操作拣挪,一般是選擇運(yùn)行shell 腳本, 我是使用的grunt命令打包的所以我的shell 腳本中會有g(shù)runt 的相關(guān)命令俱诸, 具體shell腳本需要根據(jù)你的業(yè)務(wù)去擴(kuò)展菠劝。
export PATH=/usr/local/bin:/path/to/node:/path/to/node_bin:/path/to/phantomjs:/path/to/jscoverage:$PATH;
加上這段shell腳本是配置mac機(jī)上的Path路徑的,有時候你運(yùn)行shell腳本時會報找不到相應(yīng)命令時加上這段估計能解決你的問題
六睁搭、構(gòu)建后操作
當(dāng)你的構(gòu)建成功后你有時你需要把打包生成的zip包保留并且提供下載
點擊保存之后一個構(gòu)建項目已經(jīng)創(chuàng)建成功赶诊。
3.Jenkins+ANT+Jmeter 接口測試的實踐
3.1 Jemeter安裝
- 解壓apache-jmeter-3.0.zip到D:\soft目錄下。
- Jmeter插件的安裝园骆。解壓JMeterPlugins-Extras-1.40.zip舔痪、JMeterPlugins-Standard-1.4.0.zip,將對應(yīng)ext目錄下的文件拷貝到D:\soft\apache-jmeter-3.0\lib\ext目錄下遇伞;
- 配置Jemeter環(huán)境變量:
- 設(shè)置環(huán)境變量辙喂,新建系統(tǒng)變量在變量名中輸入:JMETER_HOME,變量值中輸入:D:\soft\apache-jmeter-3.0鸠珠,點擊確定即可巍耗。
- 在環(huán)境變量CLASSPATH中添加%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib\logkit-1.2.jar;
在環(huán)境變量Path中添加%JMETER_HOME%\bin - 檢驗是否配置成功 運(yùn)行cmd 輸入 jmeter -v (jmeter和 -v 之間有空格)
若如圖所示 顯示版本信息 則說明安裝和配置成功。
3.2 Ant安裝
- 解壓apache-ant-1.9.3-bin.zip到D:\soft\apache-ant-1.9.3-bin目錄下;
- 配置Ant環(huán)境變量
1) 新建以下環(huán)境變量:
ANT_HOME:D:\soft\apache-ant-1.9.3-bin渐排,此為你的ANT安裝路徑炬太;
設(shè)置完成后,點擊"確認(rèn)"來保存驯耻。
2) 在環(huán)境變量PATH的最后面添加一下內(nèi)容:
;%ANT_HOME%\bin 注意前面的分號亲族,如果PATH中最后沒有分號";"的話要加上,有的話就可去除可缚。
3) 進(jìn)入cmd命令窗口霎迫,在CMD窗口中輸入ant -version,敲擊回城鍵,會顯示出你安裝的ANT版本,如果成功顯示帘靡,說明你的配置應(yīng)該是成功了.
- 本地調(diào)試使用ant構(gòu)建運(yùn)行Jmeter,并且生成jtl知给、Html報告;
1) jmeter默認(rèn)保存的是.csv格式的文件描姚,所以我們先要設(shè)置一下bin/jmeter.properties文件內(nèi)容涩赢,修改jmeter.properties文件 jmeter.save.saveservice.output_format=xml;
2) 將apache-jmeter-3.0\extras\ant-jmeter-1.1.1.jar拷貝到apache-ant-1.9.7\lib目錄下;
3) 在\apache-jmeter-3.0\extras目錄下打開CMD轩勘,運(yùn)行"ant.bat -file build.xml -Dtest=Test" . 查看\apache-jmeter-3.0\extras目錄下是否出現(xiàn)Test.jtl筒扒、Test.html文件,若有绊寻,則構(gòu)建成功花墩。注意:Test.jmx是默認(rèn)存在的Sample腳本文件悬秉。
若構(gòu)建失敗,請分析cmd打印的日志消息观游,定位問題搂捧;
- build文件推薦設(shè)置:
<?xml version="1.0" encoding="GB2312"?>
<project name="JmeterTest" default="all" basedir=".">
<tstamp>
<format property="time" pattern="yyyyMMddhhmm" />
</tstamp>
<!-- 需要改成自己本地的 Jmeter 目錄-->
<property name="jmeter.home" value="D:\soft\apache-jmeter-3.0" />
<!-- 生成的報告的title名-->
<property name="report.title" value="MINI_OA接口測試報告" />
<!-- jmeter生成jtl格式的結(jié)果報告的路徑 ".\"表示當(dāng)前路徑-->
<property name="jmeter.result.jtl.dir" value="D:\soft\apache-jmeter-3.0\jmeterTest\resultLog\jtl" />
<!-- jmeter生成html格式的結(jié)果報告的路徑 ".\"標(biāo)識當(dāng)前路徑-->
<property name="jmeter.result.html.dir" value="D:\soft\apache-jmeter-3.0\jmeterTest\resultLog\html" />
<!-- 生成的報告的前綴-->
<property name="ReportName" value="MINI_OA接口測試報告" />
<property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}.jtl" />
<property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}.html" />
<target name="all">
<antcall target="test" />
<antcall target="report" />
</target>
<target name="test">
<taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
<jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
<!-- 聲明要運(yùn)行的腳本路徑和文件名 ".\"標(biāo)識當(dāng)前路徑 "*.jmx"執(zhí)行全部jmeter腳本-->
<testplans dir="D:\soft\apache-jmeter-3.0\jmeterTest\script" includes="*.jmx" />
<property name="jmeter.save.saveservice.output_format" value="xml"/>
</jmeter>
</target>
<path id="xslt.classpath">
<fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
<fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
</path>
<target name="report">
<tstamp> <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" /></tstamp>
<xslt
classpathref="xslt.classpath"
force="true"
in="${jmeter.result.jtlName}"
out="${jmeter.result.htmlName}"
style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl">
<param name="dateReport" expression="${report.datestamp}"/>
<param name="titleReport" expression="${report.title}:${report.datestamp}"/>
</xslt>
<copy todir="${jmeter.result.html.dir}">
<fileset dir="${jmeter.home}/extras">
<include name="collapse.png" />
<include name="expand.png" />
</fileset>
</copy>
</target>
</project>
3.4 Jenkins配置測試項目
- 新建測試項目(接口測試) :
在Jenkins首頁左邊 點擊新建 -> 選擇"構(gòu)建一個自由風(fēng)格的軟件項目",輸入Item名稱(中英文不限懂缕,建議使用英文) –> 點擊OK,進(jìn)入你新建的測試項目的配置頁面允跑;
- 項目配置步驟1:
a、描述:用于編寫該項目的介紹(請忽略);
b搪柑、丟棄舊的構(gòu)建:這里勾選上聋丝,為了避免多余的構(gòu)建日志、臨時文件占磁盤空間工碾,需要定期的清除過期文件弱睦。例如這里選擇保存3天之內(nèi)的構(gòu)建文件,最大保存N個構(gòu)建項目的文件渊额;
具體設(shè)置如下圖所示:
-
項目配置步驟2:
1) 配置工作空間:
點擊高級項目選項右側(cè)的高級 -> 勾選使用自定義的工作空間;
目錄填寫你的Jmeter安裝目錄\extras即可况木。說明:比如上面步驟中,大家的jmeter安裝目錄為D:\soft\apache-jmeter-3.0旬迹,則此處填寫D:\soft\apache-jmeter-3.0\jmeterTest;
工作空間
(說明:設(shè)置工作目錄主要是ant構(gòu)建時用到了該目錄下的build.xml文件火惊,以及的的jmx腳本文件、jtl文件奔垦、html文件存放在此處屹耐; 準(zhǔn)確的來說,此工作目錄與jmeter沒有任何關(guān)系椿猎,只是初學(xué)為了避免干擾惶岭,這里直接將工作空間與jmeter直接聯(lián)系在了一起。)
- 項目配置步驟3:
1.)源碼管理犯眠,這里不涉及按灶,選擇none;
2.)構(gòu)建觸發(fā)器:選擇此項目構(gòu)建的觸發(fā)條件,例如本項目的是為了實現(xiàn)接口的定時監(jiān)控筐咧,于是選擇Build periodically(定期構(gòu)建)兆衅。
注意:關(guān)于定期構(gòu)建參數(shù)的說明:"* * * * *",總共有5個參數(shù)嗜浮,分別代表分(0-59)、時(0-23)摩疑、天(1-31)危融、月(1-12)、周(0-7,0和7表示星期天)雷袋;
3.)構(gòu)建 -> 增加構(gòu)建操作 -> Execute Windows batch command 吉殃;
此處編寫刪除jtl文件的命令(因為Jmeter運(yùn)行jmx腳本文件辞居,生成jtl報告文件。如果存在同名的jtl文件蛋勺,并不會覆蓋瓦灶,而是追加,所以每次構(gòu)建運(yùn)行jmeter腳本文件之前需要刪除jtl文件):
del "D:\soft\apache-jmeter-3.0\jmeterTest\resultLog\jtl\MINI_OA接口測試報告.jtl"
項目配置步驟4:
Invoke Ant配置
Ant Version 選擇之前在jenkins設(shè)置的ant抱完;
Properties 填寫”ReportName=MINI_OA接口測試報告“贼陶,此處為你的jmeter 文件名字(不帶.jmx)。
說明:此處”ReportName=MINI_OA接口測試報告“的原因巧娱,可以查看工作目錄extras下的build.xml文件中有這樣的一段代碼: <property name="ReportName" value="MINI_OA接口測試報告" />
項目配置步驟5:
新增構(gòu)建后操作Archive the artifacts碉怔,add a New report(JMeter),
填寫用于存檔的文件"**/+++.html"禁添,這里+++與你的jmx文件名一致撮胧;
填寫Report files: **/---.jtl,這里---與你的jmx文件名一致老翘;
新增構(gòu)建后操作E-mail Notification
新增構(gòu)建后操作Editable Email Notification芹啥,如圖
然后選擇 -> Advanced Settings... ,出現(xiàn)Triggers铺峭,這里我們可以根據(jù)需要增加Triggers墓怀。例如本人增加了Failure – Still(持續(xù)失敗)的情況下郵件報警;
Recipient List :收件人的郵箱逛薇,用";"間隔
SubJect:郵件標(biāo)題
Content: 郵件內(nèi)容捺疼,可以按照HTML格式編寫。
如圖所示
到這里整套環(huán)境就搭建完成了永罚,可以自行構(gòu)建測試是否達(dá)到預(yù)期啤呼;