持續(xù)集成之Jenkins初探

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ù)集成的原則包括:

    1. 需要版本控制軟件保障團(tuán)隊成員提交的代碼不會導(dǎo)致集成失敗。常用的版本控制軟件有 IBM Rational ClearCase颅眶、CVS蜈出、Subversion 等瑟啃;
    1. 開發(fā)人員必須及時向版本控制庫中提交代碼矩肩,也必須經(jīng)常性地從版本控制庫中更新代碼到本地;
    1. 需要有專門的集成服務(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:

    1. 本人安裝的是jenkins-2.60.1.msi安裝版回挽,也可自行選擇安裝Jenkins其他版本没咙;
      Jenkins下載地址
    1. 雙擊jenkins.msi啟動安裝,安裝目錄選擇D:\Progrom Files\Jenkins千劈,然后啟動成功祭刚。
    1. Jenkins服務(wù)默認(rèn)端口為8080,如與其他服務(wù)沖突,可在..\Jenkins\jenkins.xml中修改默認(rèn)端口涡驮,如我這里修改為--httpPort=7033暗甥;


    1. 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安裝

  1. 解壓apache-jmeter-3.0.zip到D:\soft目錄下。
  1. Jmeter插件的安裝园骆。解壓JMeterPlugins-Extras-1.40.zip舔痪、JMeterPlugins-Standard-1.4.0.zip,將對應(yīng)ext目錄下的文件拷貝到D:\soft\apache-jmeter-3.0\lib\ext目錄下遇伞;
  1. 配置Jemeter環(huán)境變量:
  1. 設(shè)置環(huán)境變量辙喂,新建系統(tǒng)變量在變量名中輸入:JMETER_HOME,變量值中輸入:D:\soft\apache-jmeter-3.0鸠珠,點擊確定即可巍耗。
  2. 在環(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
  3. 檢驗是否配置成功 運(yùn)行cmd 輸入 jmeter -v (jmeter和 -v 之間有空格)
    若如圖所示 顯示版本信息 則說明安裝和配置成功。

3.2 Ant安裝

  1. 解壓apache-ant-1.9.3-bin.zip到D:\soft\apache-ant-1.9.3-bin目錄下;
  1. 配置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)該是成功了.

  1. 本地調(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打印的日志消息观游,定位問題搂捧;

  1. 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配置測試項目

  1. 新建測試項目(接口測試) :
    在Jenkins首頁左邊 點擊新建 -> 選擇"構(gòu)建一個自由風(fēng)格的軟件項目",輸入Item名稱(中英文不限懂缕,建議使用英文) –> 點擊OK,進(jìn)入你新建的測試項目的配置頁面允跑;
  1. 項目配置步驟1:
    a、描述:用于編寫該項目的介紹(請忽略);
    b搪柑、丟棄舊的構(gòu)建:這里勾選上聋丝,為了避免多余的構(gòu)建日志、臨時文件占磁盤空間工碾,需要定期的清除過期文件弱睦。例如這里選擇保存3天之內(nèi)的構(gòu)建文件,最大保存N個構(gòu)建項目的文件渊额;
    具體設(shè)置如下圖所示:
  1. 項目配置步驟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)系在了一起。)

  1. 項目配置步驟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ù)期啤呼;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市呢袱,隨后出現(xiàn)的幾起案子官扣,更是在濱河造成了極大的恐慌,老刑警劉巖羞福,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惕蹄,死亡現(xiàn)場離奇詭異,居然都是意外死亡治专,警方通過查閱死者的電腦和手機(jī)卖陵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來张峰,“玉大人泪蔫,你說我怎么就攤上這事〈” “怎么了撩荣?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵铣揉,是天一觀的道長。 經(jīng)常有香客問我餐曹,道長逛拱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任台猴,我火速辦了婚禮朽合,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘卿吐。我一直安慰自己旁舰,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布嗡官。 她就那樣靜靜地躺著箭窜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪衍腥。 梳的紋絲不亂的頭發(fā)上磺樱,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機(jī)與錄音婆咸,去河邊找鬼竹捉。 笑死,一個胖子當(dāng)著我的面吹牛尚骄,可吹牛的內(nèi)容都是我干的块差。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼倔丈,長吁一口氣:“原來是場噩夢啊……” “哼憨闰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起需五,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤鹉动,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后宏邮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泽示,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年蜜氨,在試婚紗的時候發(fā)現(xiàn)自己被綠了械筛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡飒炎,死狀恐怖变姨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情厌丑,我是刑警寧澤定欧,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站怒竿,受9級特大地震影響砍鸠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜耕驰,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一爷辱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧朦肘,春花似錦饭弓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至趴生,卻和暖如春阀趴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背苍匆。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工刘急, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人浸踩。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓叔汁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親检碗。 傳聞我的和親對象是個殘疾皇子据块,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容