原始鏈接:http://blog.csdn.net/a464057216/article/details/52934077
requirments
- OS: Ubuntu 14.04+
- Gitlab 8.1 +
- Jenkins 2.19.0 +
使用Jenkins對Python項目進行自動化測試主要依賴nose(單元測試)、coverage(代碼覆蓋率、pylint(語法檢查))等工具,配合插件在Jenkins的Web界面展示測試結果。流程如下:
1.代碼改動push到Gitlab自動觸發Jenkins構建項目,執行自動化測試。
2.測試包括基本功能測試、覆蓋率分析、語法檢查等,所有的測試結果在Jenkins上展示,包括測試通過率分析(可以具體到每個用例的通過情況)、測試覆蓋率可以具體到每一行、語法檢查可以具體到每一行的錯誤細節。
3.如果測試成功,Jenkins新建一個Tag提交到Gitlab項目中,同時生成一個供下載的zip包。
4.Jenkins界面包含項目代碼行數分析。
5.在Gitlab項目的commits列表中看到可以每一次CI的結果,點擊build-id
后會跳轉到Jenkins界面查看構建信息。在Jenkins中點擊相應的commit-hash會跳轉到Gitlab對應提交的diff頁面。
一、jenkins中進行nose(單元測試)、pylint(語法檢查)、coverage(代碼覆蓋率)
1、准備Gitlab側API token
在個人信息的Account界面生成Private token
:
在Jenkins上添加對應API token的Credential
Credentials
管理界面添加該API token:
然后在Jenkins系統設置的Gitlab部分填寫相關信息(使用剛才添加的API token,可以點擊Test Connection
測試配置是否OK):
配置Gitlab的webhook
在Gitlab的對應項目上配置webhook,trigger的URL是Jenkins頁面中GitLab CI Service URL
后面給出的URL,勾選Push events
和Merge Request events
等自己需要的條件,如果Jenkins沒有https支持,去勾選Enable SSL verification
,然后點擊Add Webhook
,點擊Test
按鈕嘗試觸發Jenkins構建即可。
至此如果對Gitlab上的項目的master分支有修改的話,Jenkins會立即觸發構建(下圖中的第29次構建,當然也可以在Jenkins的Web管理界面手工觸發構建如第30次構建):
構建完成后構建結果會同步到Gitlab中(點擊對應的對號
或者差號
后再新的頁面點擊對應的build id
會跳轉到Jenkins的構建信息頁面):
對於成功的構建,Jenkins會自動新建一個Tag並提交到Gitlab:
2、配置Jenkins項目
在Jenkins的自由風格的軟件項目中設置如下內容:
雖然使用的是Gitlab,但是在Github project
中配置相關信息之后,可以在構建記錄中點擊commit-id
直接跳轉到Gitlab的diff頁面:
上面的GitLab Repository Name
主要配合Gitlab logo
插件使用,先在Jenkins的系統設置中設置GitLab Account Setting
(使用之前在Gitlab上生成的API token):
填寫項目在Gitlab的Project URL
后,在Jenkins的項目列表中可以顯示項目在Gitlab上的圖標:
繼續配置自由項目的源碼管理
部分,這里使用的Credentials
是Jenkins服務器訪問Gitlab使用的私鑰信息而不是之前配置的APi token,Refspec中的信息為:
+refs/heads/*:refs/remotes/origin/* +refs/merge-requests/*/head:refs/remotes/origin/merge-requests/*
構建觸發器配置如下:
這里沒有選擇Poll SCM
的方式,如果選擇這種方式的話,為了提高Jenkins的響應速度,通產會設置較短的輪詢周期比如1分鍾,這樣Jenkins上面項目過多的話對Gitlab的API訪問頻率太高。
為了將Jenkins的每次構建信息發布到Gitlab,需要在構建后的操作步驟中添加Publish build status to Gitlab Commit
:
如果構建成功,Jenkins提交新建的Tag到Gitlab時,需要使用的SSH私鑰有可寫權限,然而Gitlab的deploy key是沒有寫權限的,所以要在Gitlab中添加對應公鑰到用戶信息的SSH Keys
信息中使其具有寫權限,然后在Jenkins的構建后的操作步驟中添加Git Publisher
:
上面配置中的
Target remote name
應該與源碼管理
->git
->Repositories
中的name
信息一致。
2、配置Jenkins項目構建步驟,進行測試
在構建中增加構建步驟,選擇Execute shell
:
在其中填寫如下內容(其中mypackage
是被測試的package的名字):
virtualenv --no-site-packages env . env/bin/activate pip install --quiet nosexcover pip install --quiet pylint nosetests --with-xcoverage --with-xunit --cover-package=mypackage --cover-erase pylint -f parseable mypackage/ | tee pylint.out sloccount --duplicates --details mypackage > sloccount.sc tar --exclude *pyc -zcf mypackage.tar.gz mypackage
2.1、pylint(語法檢查)
pylint.out
pylint生成的語法檢查報告pylint.out
需要配合Violations plugin
插件使用,然后在構建后操作
中勾選Report Violations
,找到pylint的配置並填寫:
構建后在構建記錄中即可以看到具體到文件每一行的語法檢查結果:
2.2、單元測試
coverage.xml
--with-xcoverage
選項會生成coverage.xml
文件,安裝Cobertura Plugin
后可以在構建后操作
中勾選Publish Cobertura Coverage Report
填寫相關信息:
構建完成后,在構建信息的Cobertura Coverage Report
頁面,可以看到測試覆蓋率變化的趨勢,和具體到每個文件的覆蓋情況:
nosetests.xml
--with-xunit
選項會生成nosetests.xml
文件,在構建后操作
中勾選Publish JUnit test result report
即可顯示該部分的內容:
在構建結果的Test Result
頁面可以看到測試結果(點擊進入可以看到結果詳情):
2.3、sloccount項目代碼行數分析工具
項目代碼行數分析依賴sloccount這個工具,首先在Jenkins服務器上安裝它:
# Written by: CSDN - Mars Loo的博客 sudo apt-get update sudo apt-get install sloccount
在Jenkins的構建后的操作中添加Public SLOCCount analysis results
(需要先安裝SLOCCount Plug-in插件):
然后在Jenkins的構建記錄頁面可以看到項目代碼行數的變化趨勢及各個語言的代碼行數變化:
Jenkins的構建后的操作步驟中添加Archive the artifacts
:
把這個步驟放在構建后的操作步驟中的最后,然后在每次成功構建后會生成一個下載鏈接供下載包: