8 Jenkins
8.1 Jenkins安裝
Jenkins簡介
Jenkins是一個開源軟件項目,是開源CI&CD軟件領導者,是基於Java開發的一種持續集成工具,提供超過1000個插件來支持構建、部署、自動化,滿足任何項目的需要。
CI(Continuous integration,中文意思是持續集成)是一種軟件開發時間。持續集成強調開發人員提交了新代碼之后,立刻進行構建、(單元)測試。根據測試結果,我們可以確定新代碼和原有代碼能否正確地集成在一起。
CD(Continuous Delivery, 中文意思持續交付)是在持續集成的基礎上,將集成后的代碼部署到更貼近真實運行環境(類生產環境)中。比如,我們完成單元測試后,可以把代碼部署到連接數據庫的Staging環境中更多的測試。如果代碼沒有問題,可以繼續手動部署到生產環境。
說簡單一些:沒有使用Jenkins之前,我們運行測試用例以及生成測試報告,需要在終端輸入兩個命令,一個是pytest,一個是allure generate report/ -o report/html --clean,但是配置好Jenkins之后,你只需要專心的寫代碼,只要代碼上傳到github,Jenkins會自動檢查到代碼有更新,然后自動執行上面的那兩條命令。並且還可以將報告直接發到某個郵箱。
Jenkins安裝
Jenkins需要依賴java環境,jdk1.5版本以上,如果沒有安裝,先去安裝jdk,配置java環境變量。
安裝步驟:
首先下載jenkins,網址:https://jenkins.io/zh/
或者這個網址:http://mirrors.jenkins.io/war-stable/latest/jenkins.war
下載的包可以是Jenkins.war,也可以是Jenkins.msi
第一步:
如果是Jenkins.war,那么將這個文件放到一個目錄下,打開cmd,進入到此文件所在目錄,執行:java -jar jenkins.war;
如果是Jenkins.msi,直接雙擊打開運行安裝。
安裝好之后,打開瀏覽器輸入:localhost:8080,會出現下面這個圖:
第二步:
耐心等待一會,會跳到另外一個界面:
按照這個界面的提示,到C盤這個路徑下找到initialAdminPassword這個文件,用記事本打開,里面會有一個密碼,類似這樣:
612582b444e649968a4393824299c61f
把這個密碼粘貼到文本框中,點確定。
第三步:
再耐心等一下,跳到下面這個界面:
點擊左邊的 Install suggested plugins,安裝推薦的插件,開始安裝插件,這個過程很漫長,要多等會。
網絡實在很差,很多安裝失敗的話,干脆停止安裝(重新刷新網頁),點擊continue跳過安裝,會跳到設置用戶頁面,設置一個用戶密碼,就進入主頁面了:
往下拉,點擊圈紅的管理插件:
點擊高級選項卡,然后往下拉,到這個頁面:
升級站點修改為:
http://mirror.xmission.com/jenkins/updates/update-center.json
或者http://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
之后重啟Jenkins。
重啟后如果需要登錄,但是還沒有設置用戶名密碼,可以用默認的,用戶名admin,密碼:C:\Users\Administrator\.jenkins\secrets\initialAdminPassword這個文件中的。
再去點擊插件管理,可選插件,選擇你要安裝的插件:
比如圖示中這些:
插件必須安裝,Jenkins就是靠這些插件構建的。
注意:如果這樣下載插件很慢,或者失敗的話,試試看到這個插件列表中去下載:
http://updates.jenkins-ci.org/download/plugins/
下載完成后到 插件管理--高級--往下拉,有一個上傳插件,如圖:
選擇瀏覽,找到你下載的hpi文件,點上傳。
安裝過程中,如果是報下面這個錯誤的話,將Jenkins重啟試試看,或者是將任務管理器中的java.exe關閉掉,再重啟服務重新安裝。還有就是說你安裝的這個插件所需要的依賴插件沒有裝好,先裝好依賴插件。
allure-jenkins-plugin |
失敗 - java.io.IOException: Allure Jenkins Plugin v2.26.0 failed to load. - Matrix Project Plugin v1.14 failed to load. Fix this plugin first. |
8.2 allure插件安裝
因為我們的報告需要用到allure,所以需要安裝allure插件,安裝方法和上面講到的一樣,安裝完allure插件,還需要裝一下allure-commandline,步驟:
還是首頁點擊manage Jenkins--往下拉點擊global tool configuration--到這個頁面往下拉,找到allure commandline,
首先點擊新增allure commandline,出現如圖:
輸入別名,點擊新增安裝,點擊extract *.zip,像如圖那樣配置好:
allure.2.7.0是你之前安裝allure的時候下載的zip文件,上面選擇版本的地方要選擇和你的allure相同的版本,點擊保存就可以使用了。
8.3 Jenkins使用
如何構建項目,讓你的項目自動運行,自動生成報告呢?
還是以python+pytest+allure為例
第一步:
點擊新建item
第二步:
輸入項目名,點擊自由風格項目,點擊確定
第三步:
輸入描述,勾選github項目,項目的url輸入你想要用Jenkins構建的url。
第四步:
往下拉,到源碼管理處,點擊git,輸入url,點擊添加
第五步:
輸入github的用戶名和密碼,點擊添加
第六步:
往下走,到構建觸發器,勾選Poll SCM,日程表輸入一個crontab命令,比如下圖輸入的是每一分鍾檢查一次:
(觸發器是根據定時任務,查看github版本是否更新,如果更新,自動構建項目。)
第七步:構建
點擊增加構建步驟,Execute Windows batch command
ps:如果是mac,選擇Execute shell
第八步:輸入構建命令
PATH=$PATH;pytest.exe的路徑
比如我的是:
PATH=$PATH;C:\Users\Administrator\AppData\Local\Programs\Python\Python36\Scripts
pytest
ps:如果是mac的話,就寫export PATH=$PATH:pytest.exe的路徑
這里就配置好了pytest的運行路徑,類似於配置環境變量,構建的時候會自動發送pytest去執行測試用例,等同於我們在終端輸入pytest。
所以你的項目必須要有pytest.ini這個文件,這樣執行pytest的時候會去自動找pytest.ini來運行測試用例。
第九步:
增加構建后的步驟:
點擊增加構建后的步驟,點擊allure report,
輸入路徑,點擊保存。路徑是生成報告的路徑,是指執行pytest的時候會自動生成一個report(也可以是別的名字,看你pytest.ini怎么寫了)的文件夾。我的是report。
到現在就完成了一個項目的配置,只要這個項目在github上有更新,Jenkins每隔1分鍾檢查一次,檢查到就自動運行測試用例了。
也可以手動的執行,點菜單中的Build Now即可。
運行完成后,如圖,會有運行歷史,#1表示第一次運行,旁邊的藍色小點表示運行成功,#2表示第二次運行,紅色表示有失敗的case。
8.4 配置郵件
首先配置發件人郵箱,發件人郵箱可以理解為Jenkins這個人的郵箱,因為郵件是由Jenkins自動發出的。
第一步,點擊系統管理,系統配置
第二步:往下拉,找到系統管理員郵箱配置,填一個郵箱,這個是系統管理員的郵箱:
第三步:一直往下拉,找到郵件通知的配置,輸入如圖兩個值,(輸入你自己的郵箱的后綴和你郵箱的smtp服務器,不一定是163),然后點擊高級:
第四步:
勾選使用SMTP認證,輸入用戶名和密碼(授權碼),這個用戶名就是將來發送報告的發件人,這里要注意的是這個密碼並不是郵箱的密碼,有的郵箱在其他設備登錄需要授權碼,163就需要,qq好像也需要,拿163的來說,他的授權碼需要登錄到網頁郵箱,去開啟授權:
按照圖示去開啟這個授權服務,開啟之后會給你一個授權碼,這個授權碼就是下面這個圖中需要填寫的密碼。
填寫好之后,勾選通過發送測試郵件測試配置,后面文本框中填寫一個收件箱,點擊測試,提示:Email was successfully sent就表示配置成功了。你填寫的收件箱應該會收到一個你上面填寫的用戶名發的一個測試郵件。
第五步:你需要配置發送郵件的附件
還是進入到首頁的系統管理--系統配置下,往下拉找到:Extended E-mail Notification,輸入SMTP server,輸入Default user E-mail suffix,點高級,勾選Use SMTP Authentication,輸入用戶名和密碼(授權碼),如圖:
這一步和前面的步驟有些像,仿照寫就行。
第六步:繼續往下拉,找到Default content Type,選擇html,輸入Default content
Default content的內容:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次構建日志</title> </head> <body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0"> <table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif"> <tr> <td>(本郵件是程序自動下發的,請勿回復!)</td> </tr> <tr> <td><h2> <font color="#0000FF">構建結果 - ${BUILD_STATUS}</font> </h2></td> </tr> <tr> <td><br /> <b><font color="#0B610B">構建信息</font></b> <hr size="2" width="100%" align="center" /></td> </tr> <tr> <td> <ul> <li>項目名稱 : ${PROJECT_NAME}</li> <li>構建編號 : 第${BUILD_NUMBER}次構建</li> <li>Git 版本: ${GIT_REVISION}</li> <li>觸發原因 : ${CAUSE}</li> <li>構建日志 : <a href="${BUILD_URL}console">${BUILD_URL}console</a></li> <li>構建地址 : <a href="${BUILD_URL}">${BUILD_URL}</a></li> <li>工作目錄 : <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li> <li>報告地址 : <a href="${BUILD_URL}allure">${BUILD_URL}allure</a></li> <li>項目地址 : <a href="${PROJECT_URL}">${PROJECT_URL}</a></li> </ul> </td> </tr> <tr> <td><b><font color="#0B610B">Changes Since Last Successful Build:</font></b> <hr size="2" width="100%" align="center" /></td> </tr> <tr> <td> <ul> <li>歷史變更記錄 : <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a></li> </ul> ${CHANGES_SINCE_LAST_SUCCESS,reverse=true, format="Changes for Build #%n:<br />%c<br />",showPaths=true,changesFormat="<pre>[%a]<br />%m</pre>",pathFormat=" %p"} </td> </tr> <tr> <td><b>Failed Test Results</b> <hr size="2" width="100%" align="center" /></td> </tr> <tr> <td><pre style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">$FAILED_TESTS</pre> <br /></td> </tr> <tr> <td><b><font color="#0B610B">構建日志 (最后 100行):</font></b> <hr size="2" width="100%" align="center" /></td> </tr> <!-- <tr> <td>Test Logs (if test has ran): <a href="${PROJECT_URL}ws/TestResult/archive_logs/Log-Build-${BUILD_NUMBER}.zip">${PROJECT_URL}/ws/TestResult/archive_logs/Log-Build-${BUILD_NUMBER}.zip</a> <br /> <br /> </td> </tr> --> <tr> <td><textarea cols="80" rows="30" readonly="readonly" style="font-family: Courier New">${BUILD_LOG, maxLines=100}</textarea> </td> </tr> </table> </body> </html>
還有簡單的寫法,可以網上搜一下。
這樣發件人就配置好了,接下來需要配置收件人。
收件人配置
收件人是針對某個項目的,每個項目的收件人可能不一樣,所以我們需要針對每個項目單獨配置,要點擊項目,進入到項目中配置:
第一步:點擊項目,點擊配置
第二步:往下拉,拉到構建后操作,添加一個構建后操作,選擇Editable Email Notification
第三步:往下拉,點擊Advanced Settings
第四步:點擊Triggers中的高級按鈕
Triggers是觸發器,這里的Failure-any意思是任何失敗的時候都會觸發發送郵件的功能。成功了就不會發郵件了。
第五步:Recipient List中輸入收件人的郵箱,多個郵件用逗號分隔。
PS:需要注意,這樣配置,只會在運行失敗,報告中有失敗才會發郵件,報告中如果是黃色的警告,是不會發郵件的。紅色的失敗才會發。