搭建hudson/jenkins+cppcheck+cpplint+cccc持续集成环境
1 Jenkins介绍Jenkins是基于Java开发的一种持续集成工具,Hudson是它的前身。Jenkins用于监控程序重复的工作,包括:1、持续的软件版本发布/测试项目。2、监控外部调用执行的工作。l Jenkins的特性1、易于安装-只要把jenkins.war部署到servlet容器,不需要数据库支持。2、易于配置-所有配置都是通过其提供的web界面实现。3
1 Jenkins介绍
Jenkins是基于Java开发的一种持续集成工具,Hudson是它的前身。Jenkins用于监控程序重复的工作,包括:
1、持续的软件版本发布/测试项目。
2、监控外部调用执行的工作。
l Jenkins的特性
1、易于安装-只要把jenkins.war部署到servlet容器,不需要数据库支持。
2、易于配置-所有配置都是通过其提供的web界面实现。
3、集成RSS/E-mail/IM-通过RSS发布构建结果或当构建失败时通过e-mail实时通知。
4、生成JUnit/TestNG测试报告。
5、分布式构建支持-Jenkins能够让多台计算机一起构建/测试。
6、文件识别- Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等。
7、插件支持-Jenkins可以通过插件扩展,你可以开发适合自己团队使用的工具。
2准备
² JDK安装包((jdk-8u11-windows-i586_14459_BDdl.exe)
² tomcat安装包(apache-tomcat-8.0.15.exe)
² jenkins war包或hudson war包(jenkins.war)
² VC或者visual studio(VS2013_RTM_ULT_CHS.iso)
² cppcheck安装包(cppcheck-1.68-x86-Setup.msi)
² cccc安装包(CCCC_3.1.4_setup.exe)
² python2.7安装包(python-2.7.msi)
² cpplint.py
注:cpplint 必须在python2.7下执行
3安装
3.1安装JDK
1.安装:双击运行exe,按照提示安装即可。
2.配置环境变量
3.验证是否安装成功:点击“开始”->“运行”,输入“cmd”进入命令行界面,打入“java -version”,如果安装成功将会显示所安装的版本。
3.2安装Apache
1.安装:一路默认安装即可。
2配置:修改配置为开机自启动:找到 Configure Tomcat,修改启动类型为“自动”,并确定。
3.验证是否安装成功:在浏览器中输入http://localhost:8080,显示界面如下
3.3安装Jenkins
将war包放在tomcan安装路径下的webapps目录下。在浏览器中输入http://localhost:8080/jenkins(或http://localhost:8080/hudson),显示界面如下:
建议使用Jenkins,Hudson-3.2.1 warning插件不能很好的集成cpplint结果。
3.4安装VC或visual studio
建议通过DAEMON Tools Lite安装visual studio。
3.5安装cppcheck
建议直接安装在C盘下或c:\cppcheck目录下。
3.6安装cccc
建议直接安装在C盘下或c:\cccc目录下。
3.7安装python2.7
默认安装即可。
4插件安装
jenkins的好用基本体现在其众多而强大的插件上,在“系统管理”中可以找到“插件管理”,为了更好的使用jenkins,还需要安装一些插件,在“可选插件”中进行选择,本文中建议安装以下插件:
² Subversion Plug-in:支持Subversion作为配置服务器
² Cppcheck Plug-in:使用其生成cppcheck报告
² CCCC Plugin:使用其生成cccc报告
² Warnings Plug-in:从控制台或本地文件中读取警告信息并生成报告
² Violations plugin:生成静态代码检查报告,
² Email Extension Plugin:如果希望部署完成后能将结果以邮件的形式进行
通知,可以安装该插件
jenkins支持两种方式的插件安装,一种是在线自动安装。另一种是本地手动安装。安装完插件需要重新启动jenkins。即关闭tomcat服务,再启动。
4.1.在线自动安装
点击【系统管理】,再点击【管理插件】。在【Available】选项卡里选择想要安装的插件。
点击下面的install 然后等一段时间.
显示打勾的状态就是这个插件已经安好了
如果插件太多,可以通过Search找到想要安装的插件。
4.2本地手动安装
手动将插件下载到本地,然后点击【系统管理】,再点击【管理插件】。在【高级】选项卡里上传插件,然后点击Upload。
如果是jenkins,也可将hpi文件拷贝至jenkins home目录下的WEB-INF/plugins目录下。
5全局配置
jenkins的总体配置,都是在“系统管理”中进行配置的,hudson“系统管理”提供了如下功能:
l 系统设置
全局设置&路径,这是jenkins最核心的功能,jdk,ant,maven,scp,邮件等等,都 是在这里设置的。
l读取设置
放弃当前内存中所有的设置信息并从配置文件中重新读取,仅用于当您手动修改配置文 件时重新读取设置。
l管理插件
添加、删除、禁用或启用Hudson功能扩展插件。
l系统信息
显示系统环境信息以帮助解决问题。该功能会列出系统属性,环境变量以及Plugins信息。
l系统日志
系统日志从java.util.logging 捕获Hudson相关的日志信息。
l负载统计
检查您的资源利用情况,看看是否需要更多的计算机来帮助您构建。
lHudson CLI
从您命令行或脚本访问或管理您的Hudson。
感兴趣的话可以通过命令行尝试一下
l脚本命令行
执行用于管理或故障探测或诊断的任意脚本命令。这就是Groovy scripts。
l管理节点
添加、删除、控制和监视系统运行任务的节点。
l管理用户
创建/删除/修改Hudson用户,系统的登录用户都是在这里建立的。
l准备关机
停止执行新的构建任务以安全关闭计算机
全局设置中很多是我们用不到的,这里只介绍安全设置和邮件设置。
5.1邮件通知
1. 点击系统管理,选系统设置
2. 最后一项——邮件通知,填入以下信息,注,系统管理员邮件地址是事先申请的一个邮箱,相当于邮件中转站的作用,每次项目build后都会从这个中转站发邮件到项目相关人员的邮箱中。Hudson URL可以使http://127.0.0.1:8080,也可以是http:localhost:8080,貌似也可以用自己的ip地址,但是如果用自己的ip的话别人就进不来了,不晓得我的这个理解有误没。
点击advanced,勾选使用SMTP认证,将中转站邮箱账号及密码填入,且smtp端口为25,charset值按系统默认不变。点击用系统管理员测试邮件设置,若设置成功,该邮箱会收到一封系统确认邮件。
3. 系统邮件设置弄好后就可以去设置单个项目的邮件设置,因为每个项目的人员是非固定的,所以需要对该项目人员设置邮箱,只有该项目人员才能收到该项目的相关邮件。
选中要设置的项目,点击设置,勾选EditableEmail Notification,将项目相关人的邮箱录入,用逗号分开。点save。
4. 可能还需要下载邮件的插件才能正常运行,因此,需要在系统管理中选中管理插件,找到
点击安装
5. 回到项目设置中,在Editable Email Notification,下面勾选无论build失败还是成功都要发送邮件给项目相关人员,去掉send tocommitters的选项,且add a trigger全选:select。
点save保存。
6. 至此,jenkins邮件设置完成,
回到项目,点击立即构建,无论成功或失败都会有邮件发送到项目组成员的邮箱中,说明邮件设置成功。
5.2安全设置
1.在系统管理中的系统设置有一项:启用安全,选中它,并在hudson专有用户数据库中勾选允许用户注册这一选项,表明系统允许添加用户,若去掉这个勾选,则说明系统不允许用户注册。
2. 紧接其后的是授权策略,选中安全矩阵,在添加用户/组后面填入要注册的用户的名字,如Leanna,点击添加,则该用户就在用户/组的列表中了,但此时并没有注册成功。可根据实际需要勾选该用户的使用权限,是最高权限还是只读只写,可勾选。最后点save。
3. 可先退出之前的登陆用户,右上角
4. 点击新建账户create anaccount
5. 填入相关信息
6. 因为之前已经有注册过这个账号,所以这个名字不能用了,可换其他的比如Amy,注册成功后会有邮件发送至该人员的电子邮箱。
3. 项目相关人员都注册好了之后就可取消允许用户注册这一选项,以避免其他非项目相关人员进来。
6新建job
6.1创建一个Jenkins作业。
1.点击新建任务链接。创建一个自由风格的软件项目,输入任务名称。
6.2 Jenkins任务的基本配置
Discard OldBuilds选项配置如何抛弃旧的构建。如果每次构建相关的文件都保存下来,磁盘空间将被渐渐消耗光。Hudson为此提供了两种方式让用户选择保留哪些构建任务的相关文件:
1) Days to keep builds:如果其值为非空的N,就仅保留N天之内的构建文件。
2) Max # of builds to keep:如果#非空,就仅保留最多#个最近构建的相关文件。
如:保留10个最近的构建,在Max # of buildsto keep一栏中输入“10”即可。
6.3设置工作目录
点击 “Advanced Job Options”下的“Advanced...”按钮,选中“Use custom workspace”,设置Directory为我们的工作目录(例如我设置为E:\Hudson\mytest)。
6.4 Jenkins任务的源码仓库配置
在项目配置页面Source CodeManagerment部分,选择Subversion,然后在Repository URL文本框中输入项目的Subversion仓库地址(如:svn://127.0.0.1/account/trunk)。
然后单击entercredential填写配置仓库的认证信息。
在上图红色警告部分,点击【enter credential】输入用户名密码。
6.5 Jenkins任务的构建触发配置
Hudson 支持三种方式触发构建:
1) Build after otherprojects are built:在其他项目构建完成后构建本项目。
2) Buildperiodically:周期性的构建本项目。
3) Poll SCM:周期性的轮询源码仓库,发现有更新时构建本项目。
一般使用第三种。
Hudson使用著名的 UNIX任务调试工具Cron(http://en.wikipedia.org/wiki/Cron)所使用的配置方式来配置轮询代码仓库的频率:用 5 个字段表示不同的时间单位,字段之间用空格分隔:分(0-59) 时(0-23) 日(1-31) 月(1-12)星期几(0-7,0、7都表示周日)。
几种特殊匹配符:
1) * :匹配范围内任何值
2) M-N :匹配 M-N 范围内任何值
3) A , B , … , Z :逗号匹配多个值
4) */X 或 M-N/X :范围内能被 X 整除的
星期几与日期是或的关系。
对于一个健康的项目,常见的做法是:每隔10分钟轮询代码仓库,Schedule对应的配置为:*/10 * * * *。
可以用“#”在Schedule配置文本框中进行注释。
6.6 Jenkins任务的构建配置
6.6.1构建编译
1)单击Build部分的Add build step,选择Execute Windowsbatch command;
2)然后输入构建编译命令,例如:
call "C:\ProgramFiles (x86)\Microsoft Visual Studio\VC98\Bin\VCVARS32.BAT"
msdev E:\Hudson\mytest\FtpClient.dsp /MAKE "FtpClient - DEBUG"
其中dsp是工程文件,也可使用工作区文件dsw,"FtpClient - DEBUG"中的FtpClient表示FtpClient编译FtpClient工程。
注:也可将上述命令存成一个bat文件,例如E:\Hudson\hudson.bat。其中hudson.bat内容为上述命令。构建命令就是文件地址,即E:\Hudson\hudson.bat。
6.6.2 Cppcheck检查
1)单击Build部分的Add build step,选择Execute Windowsbatch command;
2)然后输入静态代码检查命令,例如:
C:\Cppcheck\cppcheck.exe--enable=all --xml-version=2 e:\Hudson\mytest 2>E:\Hudson\mytest\cppcheck-result.xml 1>E:\Hudson\cppcheck.log
注:其中cppcheck-result.xml保存的是cppcheck代码检查结果。
6.6.3 CCCC检查
1)单击Build部分的Add build step,选择Execute Windows batchcommand;
2)然后输入静态代码检查命令,例如:
C:\CCCC\cccc.exeE:\Hudson\mytest\*.cpp --outdir=E:\Hudson\cccc--xml_outfile=E:\Hudson\mytest\cccc-result.xml 2>E:\Hudson\cccc.log注:其中cccc-result.xml保存的是cppcheck代码检查结果。
6.6.4 Cpplint检查
1、检查单个文件
1)单击Build部分的Add build step,选择Execute Windows batchcommand;
2)然后输入代码规范检查命令,例如:
C:\Python27\python.exec:\cpplint\cpplint.py E:\Hudson\mytest\FtpClient.cpp 2>E:\Hudson\mytest\cpplint-result.xml
set errorlevel=0
注:因为cpplint的返回值会是1,所以重置下返回值。否则任务总显示失败
2、检查整个目录
如果要对目录遍历,对所有文件都进行检查,可以用另一个python来检索然后调cpplint检查。代码如下:
import os, fnmatch, sys
def all_files(root, patterns = '*', single_level = False,yield_folders=False):
patterns = patterns.split(';')
for path, subdirs, files in os.walk(root):
if yield_folders:
files.extend(subdirs)
files.sort()
for name in files:
for pattern in patterns:
if fnmatch.fnmatch(name, pattern):
yield os.path.join(path,name)
break
if single_level:
break
if __name__ == '__main__':
if len(sys.argv) <2:
print 'Please set theabsolute path as the first parameter for parse.'
sys.exit()
cmd="c:\cpplint.py"
for path inall_files(sys.argv[1],'*.cpp;'):
cmd=''.join([cmd,path])
os.system(cmd)
代码另存为lintfordir.py,
1)单击Build部分的Add build step,选择Execute Windows batchcommand;
2)然后输入代码规范检查命令,例如:
C:\Python27\python.exec:\lintfordir.py E:\Hudson\mytest\ 2>E:\Hudson\mytest\cpplint-result.txt
seterrorlevel=0
6.7 发布结果
每次执行完任务以后将检查结果发布,生成的报告进行汇总。
6.7.1 CCCC报告
1)选中Post-build Actions下的Publish CCCC report
2)输入cccc 报告文件名,注意,这里需要使用相对路径,basedir是工作目录,例如这里的basedir是E:\Hudson\mytest,结果保存在E:\Hudson\mytest下,所以输入文件名cccc-result.xml。
6.7.2 Cppcheck报告
1)选中Post-build Actions下的Publish Cppcheck results
2)输入Cppcheck报告文件名,注意,这里需要使用相对路径,basedir是工作目录,例如这里的basedir是E:\Hudson\mytest,结果保存在E:\Hudson\mytest下,所以输入文件名cppcheck-result.xml。
6.7.3 Cpplint报告
1)选中Post-build Actions下的Scan for compiler warnings
2)在Scan workspace files下File pattem中输入cpplint报告文件名,注意,这里需要使用相对路径,basedir是工作目录,例如这里的basedir是E:\Hudson\mytest,结果保存在E:\Hudson\mytest下,所以输入文件名cpplint-result.xml。
3)Parser选择Cpplint
6.8配置邮件
勾选【Editable Email Notification】,【Global Recipient List】里填写邮件的抄送地址。然后点击【Add a Trigger】增加【Unstable】和【Fixed】。那么就会在构建失败,不稳定和恢复正常的时候发送邮件。
展开【expand】,可以定制每次构建以后,状态分别是失败,不稳定,恢复的时候发送邮件的模板。例如:
6.9保存
点击【save】按存设置。不久就会自动执行构建。也可手动点击【立即构建】。
备注:
1、定时检测,构建
Build Triggers
Buildperiodically:(定期构建)此选项 (也是使用定时作业表达式)仅仅通知Hudson按指定的频率对项目进行构建,而不管SCM是否有变化。我这个作业就属于目标测试环境是按某种方式定期修订的而SCM却是静态的情况。如果您想在这个作业中运行一些测试用例的话,它可能就很有帮助。
PollSCM:这是CI 系统中常见的选项。当您选择此选项,您可以指定一个定时作业表达式来定义Hudson每隔多久检查一下您源代码仓库的变化。如果发现变化,就执行一次构建。例如,表达式中填写0,15,30,45 * * * *将使Hudson每隔15分钟就检查一次您源码仓库的变化。
举例:
Poll SCM:定时检查源码变更(根据SCM软件的版本号),如果有更新就checkout最新code下来,然后执行构建动作。我的配置如下:
*/5 ** * * (每5分钟检查一次源码变化)
Buildperiodically:周期进行项目构建(它不care源码是否发生变化),我的配置如下:
0 2 ** * (每天2:00 必须build一次源码)
2、cppcheck介绍
cppcheck 是一个静态代码检查工具,支持c, c++ 代码;作为编译器的一种补充检查,只检测那些编译器通常无法检测到的bug类型。cppcheck对产品的源代码执行严格的逻辑检查。执行的检查包括:
1. 自动变量检查
2. 数组的边界检查
3. class类检查
4. 过期的函数,废弃函数调用检查
5. 异常内存使用,释放检查
6. 内存泄漏检查,主要是通过内存引用指针
7. 操作系统资源释放检查,中断,文件描述符等
8. 异常STL 函数使用检查
9. 代码格式错误,以及性能因素检查
示例:
C:\Cppcheck\cppcheck.exe --enable=all--xml-version=2 e:\Hudson\mytest 2>E:\Hudson\mytest\cppcheck-result.xml 1>E:\Hudson\cppcheck.log
1:一般输出如Checking e:\Hudson\mytest\FtpClient.cpp..
2:检查的错误输出
<errorid="purgedConfiguration" severity="information"msg="The configuration &#039;APSTUDIO_INVOKED&#039; wasnot checked because its code equals another one." verbose="Theconfiguration &#039;APSTUDIO_INVOKED&#039; was not checkedbecause its code equals another one.">
<location file="FtpClient.cpp" line="0"/>
3、CCCC介绍
cccc( C and C++ Code Counter),检查c/c++代码复杂度的工具
C:\CCCC\cccc.exe E:\Hudson\mytest\*.cpp --outdir=E:\Hudson\cccc--xml_outfile=E:\Hudson\mytest\cccc-result.xml 2>E:\Hudson\cccc.log
会产生html和xml两种格式的检查输出
4、cpplint介绍
cpplint是一个python脚本cpplint.py,是google推出的C++编码规范检查工具。
常见问题:
1.如果是xp系统,解析cppcheck report时可能出现javax.xml.bind.UnmarshalException的问题。
解决办法:将cppcheck检查语句改为:
C:\Cppcheck\cppcheck.exe --enable=all --xml--xml-version=2 --errorlist e:\Hudson\mytest >E:\Hudson\mytest\cppcheck-result.xml
2.如果涉及工作区dsw,且工作区中包含多个项目,可用编译命令(举例):
msdevE:\Hudson\mytest\FtpClient.dsw /MAKE "ALL - DEBUG"
其中FtpClient.dsw为工作区文件,ALL表示表示所有工程,也可指定编译单个工作,例如有工程Client,可指定为msdev E:\Hudson\mytest\FtpClient.dsw /MAKE "Client -DEBUG"
3.如果jenkins中要构建cppchek等report,可将报告存储在workspace中,将svn中的Local module directory设置为check out目录,就不至于将report与开发代码混在一起。
(jenkins中若设置workspace,则workspace为job根目录)
4.若要使用svn ci将源码提交,可下载subversion至本地,然后在windows batch command中输入命令:
"C:\Program Files (x86)\Subversion\bin\svn.exe" ci tt.txt -m"xpp"
5.若svn命令出现svn:E155036: 请参阅命令 'svn upgrade'的提示。
解决办法:将本地subversion版本更新至与jenkins中subversion版本相同. jenkins中subversion版本在系统管理->系统设置->Subversion->Subversion Workspace Version中进行设置。
6.若cpplint检查时出现错误:
UnicodeDecodeError: 'ascii' codec can'tdecode byte 0xe0 in position 0
解决办法:在执行的python文件中加入(即cpplint.py)
import sys
reload(sys)
sys.setdefaultencoding('gb18030')
更多推荐
所有评论(0)