转载请注明原始链接:http://blog.csdn.net/a464057216/article/details/52934077
在Jenkins上对Github项目或者Gitlab项目做自动化构建的初级配置方法可以参考自动化工具Jenkins安装配置入门。在Ubuntu上搭建Gitlab服务器的方法也可以参考我之前的博文。
使用Jenkins对Python项目进行自动化测试主要依赖nose(单元测试)、pylint(语法检查)、coverage(代码覆盖率)等工具,配合插件在Jenkins的Web界面展示测试结果。如果使用Gitlab托管代码,本文也涵盖了Jenkins与Gitlab配合的配置方法,最终效果如下:
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页面。
项目代码行数分析依赖sloccount这个工具,首先在Jenkins服务器上安装它:
# Written by: CSDN - Mars Loo的博客
sudo apt-get update
sudo apt-get install sloccount
在其中填写如下内容(其中mypackage
是被测试的package的名字):
# Written by: CSDN - Mars Loo的博客
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
--with-xunit
选项会生成nosetests.xml
文件,在构建后操作
中勾选Publish JUnit test result report
即可显示该部分的内容:
在构建结果的Test Result
页面可以看到测试结果(点击进入可以看到结果详情):
--with-xcoverage
选项会生成coverage.xml
文件,安装Cobertura Plugin
后可以在构建后操作
中勾选Publish Cobertura Coverage Report
填写相关信息:
构建完成后,在构建信息的Cobertura Coverage Report
页面,可以看到测试覆盖率变化的趋势,和具体到每个文件的覆盖情况:
pylint生成的语法检查报告pylint.out
需要配合Violations plugin
插件使用,然后在构建后操作
中勾选Report Violations
,找到pylint的配置并填写:
构建后在构建记录中即可以看到具体到文件每一行的语法检查结果:
在个人信息的Account界面生成Private token
:
Credentials
管理界面添加该API token:
然后在Jenkins系统设置的Gitlab部分填写相关信息(使用刚才添加的API token,可以点击Test Connection
测试配置是否OK):
虽然使用的是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
信息一致。
在Jenkins的构建后的操作中添加Public SLOCCount analysis results
(需要先安装SLOCCount Plug-in插件):
然后在Jenkins的构建记录页面可以看到项目代码行数的变化趋势及各个语言的代码行数变化:
Jenkins的构建后的操作步骤中添加Archive the artifacts
:
把这个步骤放在构建后的操作步骤中的最后,然后在每次成功构建后会生成一个下载链接供下载包:
在Gitlab的对应项目上配置webhook,trigger的URL是Jenkins页面中GitLab CI Service URL
后面给出的URL,勾选Push events
和Merge Request events
等自己需要的条件,如果Jenkins没有https支持,去勾选Enable SSL verification
,然后点击Add Webhook
,点击Test
按钮尝试触发Jenkins构建即可。
至此使用Jenkins对Python项目进行自动化测试的搭建已经全部完成。如果对Gitlab上的项目的master分支有修改的话,Jenkins会立即触发构建(下图中的第29次构建,当然也可以在Jenkins的Web管理界面手工触发构建如第30次构建):
构建完成后构建结果会同步到Gitlab中(点击对应的对号
或者差号
后再新的页面点击对应的build id
会跳转到Jenkins的构建信息页面):
对于成功的构建,Jenkins会自动新建一个Tag并提交到Gitlab:
如果觉得我的文章对您有帮助,欢迎关注我(CSDN:Mars Loo的博客)或者为这篇文章点赞,谢谢!