`
universsky
  • 浏览: 99295 次
文章分类
社区版块
存档分类
最新评论

一个自动构建工具 BuildBot--CruiseControl

 
阅读更多
BuildBot是一个自动构建工具。每当代码有改变,服务器要求不同平台上的客户端立即进行代码构建和测试,收集并报告不同平台的构建和测试结果。BuildBot用python写的,该python程序只依赖python环境和Twisted(一个python网络框架),可以在很多平台运行。
BuildBot是一个系统的自动化编译/测试周期最需要的软件,以验证代码的变化。通过自动重建测试每次发生了变化的东西,在建设迅速查明之前,减少不必要的失败。有警告计数, 图像大小,编译时间,以及其他参数,随着时间的推移可进行跟踪,让信息变得更明显,因此更容易得到改善。[1]
Buildbot是一个持续集成系统,自动构建/测试周期。通过自动重建和测试树每次事情发生了变化,迅速构建的问题被查明之前,其他开发人员带来不便的故障。
Buildbot是很容易设置,但非常可扩展性和可定制的。它支持任意的构建过程,并不仅限于共同构建过程为特定的语言(例如,自动工具或Ant
Buildbot支持各种平台构建测试。开发人员,没有足够的设施,以测试他们的变化无处不在提交之前,不久之后,他们是否已经打破了构建或不知道。
Buildbot有最低要求为从站:使用virtualenv,只需要一个Python的安装。后面的NAT防火墙和通信与主从站都可以运行。
Buildbot前的开发人员及时获取信息的构建,具有多种状态报告工具。
CruiseControl :简称 CC ,持续集成工具,主要提供了基于版本管理工具 ( 如 CVS、VSS、SVN) 感知变化或每天定时的持续集成,并提供持续集成报告、 Email 、 Jabber 等等方式通知相关负责人,其要求是需要进行日构建的项目已编写好全自动的项目编译脚本 ( 可基于 Maven 或 Ant) 。
平台核心非常小,但是扩展性非常强。比如对版本管理工具的控制都是在本地的工具客户端完成的,它进行统一接口的封装。

统一的Build平台使用指南

一、 CruiseControl简介

CruiseControl是目前常用的持续集成框架,它能够与VSS、CleasCase、CVS等主流配置库管理工具集成,以实现配置库代码变更自动发现,自动触发build,定时触发build,对每次build过程中生成的文件、报告等能够进行集成化管理,便于查询历史build记录。CruiseControl内嵌有WEB服务器程序Jetty,对build结果提供站点自动发布功能。

二、 统一的Build平台简介

本Build平台,基于CruiseControl,集成了CheckStyle、PMD、FindBugs、JUnit、Cobertura等工具,能够完成自动获取配置库代码、代码规范性检查、重复代码检查、编译、静态检查、自动化测试、覆盖率分析等,并将build结果以多维的方式进行站点发布。

三、 安装指南

以下我们以Windows操作系统为例,其它操作系统类同,配置库以CVS为例。

(1) 解压CruiseControl.rar到一指定目录,例如:c:\,将会有C:\CruiseControl目录。

(2) 安装CVSNT,并将cvs.exe路径加入path环境变量。

(3) 安装JDK,设置JAVA_HOME环境变量指定JDK位置。

(4) 设置CVSROOT环境变量。例如:

:pserver:t21911:12345678@127.0.0.1:D:/cvsfile

(5) 假如你的代码在cvs库的example150cc模块中,在配置库example150cc目录下创建我们为你提供的build.xml文件,并修改该文件中相关的属性,如源代码位置、测试代码位置等以适应你的项目。

(6) 启动cmd,C:\CruiseControl\projects目录下运行cvs checkout example150cc,将你项目的配置库代码checkout到当前目录,只做一次,以后就不用再做了。

(7) 修改C:\CruiseControl目录下的两个文件:config.xml、build.xml以适应你的项目。

注:在CruiseControl\projects\example150cc目录下有我们提供的例子配置库代码,也就是cvs配置库example150cc模块的内容。

四、 build.xml文件属性说明

(1) source.dir:你的源代码目录。

(2) test.dir:你的测试代码目录,该目录下含有基于JUnit的测试代码。该目录也可以是一个空目录(如果你不想做测试的话)。

(3) report.dir:build过程中输出的报告的存放目录,报告包括:CheckStyle报告、PMD报告、Copy/Paste报告、FindBugs报告、测试报告、覆盖率检查报告,每类报告以单独的子目录存放。

(4) extlib.dir:本build平台用到的相关类库,如Cobertura、CheckStyle、PMD等,请不用修改该属性。

(5) masterlib.dir:你的源代码或测试代码依赖的相关类库,也就是你编译时的CLASSPATH,请注意修改此属性,以适应你的项目。

(6) findbugs.home:FindBugs安装目录,本Build平台已提供,无需修改此属性。

另外请注意修改build.xml文件中以下红色部分的目录路径与你的环境一致(因PMD对此处的相对路径有特殊意义,所以无法做成相对路径,见谅!):

<targetname="pmd"depends="checkstyle">

<echo>正在对源代码进行PMD静态检查...</echo>

<pmdrulesetfiles="C:/CruiseControl/xml/pmd_ruleset_minimal.xml"shortFilenames="true">

<formattertype="xml"tofile="${pmd.dir}/${pmd.report}"/>

<filesetdir="${source.dir}">

<includename="**/*.java"/>

</fileset>

</pmd>

<xsltin="${pmd.dir}/${pmd.report}"out="${pmd.dir}/index.html"style="../../xml/wz-pmd-report.xslt"/>

</target>

五、 使用说明

(1)启动CruiseControl

启动cmd,进入C:\CruiseControl目录,运行:cruisecontrol.bat。将启动WEB服务器等待build。

(2)查看build结果

打开游览器,输入地址:http://localhost:8080/,如果在远程请将localhost换成对应的IP地址。

六、 其它注意事项

(1) 如何与ClearCase整合

u config.xml文件

以下代码加在modificationset元素下,用于告诉CruiseControl监控哪个配置库更新,以触发build。

<clearcase branch="main" viewpath="E:\CC\j63589_view\IN_FINNY_VOB\项目库\LACV100R001C01B02_CODE\WSMAP" />

其中viewpath指的是你配置库的本地目录路径,一直到你代码所在的project。

u enter_build.xml文件

以下代码用于获取配置库最新代码。

<ccupdate viewpath="E:\CC\j63589_view\IN_FINNY_VOB\项目库\LACV100R001C01B02_CODE\WSMAP"

graphical="false"

log="log.log"

overwrite="true"

currenttime="true"

rename="false"/>

注意:以上两个文件如果有中文,请在文件开头设定你的编码格式。

<?xml version="1.0" encoding="GBK"?>

(2) 如何与VSS整合

需要改两个地方

u config.xml

将modificationset下的cvs换成vss,参数配置详见cruisecontrol的帮助。

u enter_build.xml

将其中的cvs换成vssget,参数配置详见ANT帮助。

(3) 几个检查规则文件介绍

规则文件在xml目录下:

checkstyle_ruleset_minimal.xml—CheckStyle检查规则文件,侧重于编程规范,去除了PMD能够重复检查到的缺陷规则。

pmd_ruleset_minimal.xml—PMD检查规则文件,仅限推荐指数3、4、5的规则、去除了FindBugs和CheckStyle能发现的大部分重复问题(有少量重复)、去除了AvoidDuplicateLiterals规则。(限PMD4.2以上版本使用)

(4) Findbugs的规则文件在哪儿

Cruisecontrol/findbugs-1.2.1/plugin/coreplugin.jar压缩包中的findbugs.xml

(5) 如何定义build在某固定时间点触发

修改config.xml文件。有三种触发build策略选择:

第一种:根据配置库是否有checkin代码触发build,还可以调节平静期(quietperiod),也就是说它可以很好地解决频繁checkin的情况。

<modificationset quietperiod="20">

<cvs localworkingcopy="projects/${project.name}" />

</modificationset>

<schedule interval="25">

<ant anthome="apache-ant-1.7.0" buildfile="enter_build.xml" target="build" uselogger="true" usedebug="false" />

</schedule>

第二种:每天固定时间build,以下配置的time表示在每天的11:46定时build

<schedule>

<ant anthome="apache-ant-1.7.0" buildfile="enter_build.xml" target="build" uselogger="true" usedebug="false" time="1146" />

</schedule>

第三种:手工触发build

(6) 启动时报OutOfMemory错误,怎么解决

cruisecontrol.bat文件有以下行,请去掉注释,并将堆空间调大一点,比如512m

REM set CC_OPTS=-Xms128m -Xmx256m

(7) FindBugs检查时报OutOfMemory错误,怎么解决

修改build.xml文件中的以下红色项,参数调大一点。

<findbugs home="${findbugs.home}" jvmargs="-Xms256m -Xmx512m" reportLevel="low" output="xml:withMessages" outputFile="${findbugs.dir}/${findbugs.report}">

(8) 报异常找不到org/apache/log4j/Category类

把log4j的JAR包放到ant的lib目录下。

(9) PMD的中文目录处理

如果被检查源代码所属Project位于中文目录名路径下,PMD的输出报告中会有中文编码的问题,解决办法是在输出报告中取短路径名,也就是相对路径名,这样也可缩短报告的字节数。

<pmd rulesetfiles="basic,unusedcode,braces,design,controversial,imports,clone,codesize,naming" shortFilenames="true">

<formatter type="xml" tofile="${pmd.dir}/${pmd.report}"/>

<fileset dir="${source.dir}">

<include name="**/*.java"/>

</fileset>

</pmd>

(10) 检查报告所占屏幕空间太小

从以下入口进入可看到全屏的结果(部分报告的显示格式会有不同):

(11) 报以下错误,如何解决

pmd:

[echo] 正在对源代码进行PMD静态检查...

[xslt] Processing E:\Software Engineer\Unite Build Platform\CruiseControl\projects\sqm\report\pmd\pmd_report-20080604-1034.xml to E:\Software Engineer\Unite Build Platform\CruiseControl\projects\sqm\report\pmd\index.html

[xslt] Loading stylesheet E:\Software Engineer\Unite Build Platform\CruiseControl\xml\wz-pmd-report.xslt

[xslt] : Error! The entity "u923d" was referenced, but not declared.

[xslt] : Error! com.sun.org.apache.xml.internal.utils.WrappedRuntimeException: The entity "u923d" was referenced, but not declared.

[xslt] Failed to process E:\Software Engineer\Unite Build Platform\CruiseControl\projects\sqm\report\pmd\pmd_report-20080604-1034.xml

答:CruiseControl\xml\pmd_ruleset_minimal.xml,将此文件中的AvoidDuplicateLiterals规则去除。

(12) 浏览器访问时报错org/apache/jsp/main_jsp (Unsupported major.minor version 49.0),如何解决

答:这个错误的原因是用低版本的jdk去跑了高版本的jdk编译出来的class文件,49.0是jdk1.5的主次版本号。此时将安装目录CruiseControl\webapps\cruisecontrol\WEB-INF\work下的org目录删除即可。

注:(1)我们提供的压缩包里已经将work下的org目录删除了。(2)系统默认支持JDK1.5版本,我们无法保证PMD在JDK1.4版本下能够正常使用,build时可能会报错java.lang.UnsupportedClassVersionError: net/sourceforge/pmd/ant/PMDTask (Unsupported major.minor version 49.0),所以此时最好从build.xml文件将有关PMD内容删除。(3)我们提供的例子配置库代码因为使用了JDK1.5的新特性,无法在JDK1.4下使用。

(13) 如何查看build输出信息

答:以下文件记录了build时的输出信息:

CruiseControl/antBuilderOutput.log

(14) 统一Build平台如何避免OutOfMemory错误

5个可选的解决办法:

(1)增加机器配置,调大参数set CC_OPTS=-Xms512m -Xmx1024m。

(2)去除一些规则

(3)缩小代码检查范围,限定在只关心的部分:

<pmd rulesetfiles="C:/CruiseControl/xml/pmd_ruleset_minimal.xml" shortFilenames="true">

<formatter type="xml" tofile="${pmd.dir}/${pmd.report}"/>

<fileset dir="${source.dir}">

<include name="**/*.java"/>

</fileset>

</pmd>

(4)checkin到配置库的代码确保有较少的问题

(5)先不用PMD或CheckStyle

(15) 自动化测试时报junitvmwatcher**.properties文件找不到的问题解决

在用JUnit做自动化测试时如果报以下错误:

test:

[echo] 正在执行测试...

[junit] Tests run: 2, Failures: 0, Errors: 0, Time elapsed: 0.25 sec

[junit] java.io.FileNotFoundException: C:\CruiseControl\projects\cvsroot\Alm\junitvmwatcher1101455943.properties (系统找不到指定的文件。)

[junit] at java.io.FileInputStream.open(Native Method)

[junit] at java.io.FileInputStream.<init>(FileInputStream.java:106)

英文版错误:

test:

[echo] 正在执行测试...

[junit] Tests run: 2, Failures: 0, Errors: 0, Time elapsed: 0.25 sec

[junit] java.io.FileNotFoundException: C:\CruiseControl\projects\cvsroot\Alm\junitvmwatcher1101455943.properties (The system cannot find the file specified)

[junit] at java.io.FileInputStream.open(Native Method)

[junit] at java.io.FileInputStream.<init>(FileInputStream.java:106)

解答:这是由于ANT的版本冲突造成的,例如可能你启动的ANT版本是1.7.0,而你运行测试时的CLASSPATH路径中含有了1.6.5版本的ANTjar包,由于ANT版本的不兼容性造成了以上错误,所以解决此问题的办法是确保你的运行环境只存在一个版本的ANT。

分享到:
评论

相关推荐

    PyPI 官网下载 | buildbot-pkg-2.10.5.tar.gz

    这个库是Python自动化构建和测试工具Buildbot的一个组件,下面我们将深入探讨其功能、使用方法以及与Buildbot的关系。 Buildbot是一款开源的持续集成(Continuous Integration, CI)工具,它允许开发者自动执行构建...

    PyPI 官网下载 | buildbot-console-view-2.6.0.tar.gz

    总的来说,`buildbot-console-view-2.6.0.tar.gz`是一个针对`Buildbot`系统的控制台视图组件,它为开发者提供了一个方便的界面来跟踪和管理自动化构建和测试的进度。通过在Python环境中正确安装和配置,它可以帮助...

    PyPI 官网下载 | buildbot-2.3.0.tar.gz

    标题中的"PyPI 官网下载 | buildbot-2.3.0.tar.gz"表明这是一个在Python Package Index(PyPI)官方源上发布的软件包,名为`buildbot`,版本为2.3.0,其格式是tar.gz,这是一种常见的在Linux和Unix系统中使用的归档...

    buildbot-0.8.5

    "Buildbot-0.8.5" 是一个用于持续集成(Continuous Integration, CI)的开源工具,主要用于自动化软件构建、测试和发布流程。这个版本0.8.5是Buildbot项目的一个历史版本,旨在帮助开发者在开发过程中及时发现并解决...

    PyPI 官网下载 | buildbot-gitea-1.2.4.tar.gz

    总的来说,`buildbot-gitea-1.2.4.tar.gz`是一个集成Buildbot和Gitea的Python库,旨在支持云原生环境下的分布式系统构建和测试。它的使用者可以利用这个工具来实现更加高效和自动化的软件开发流程。

    Python库 | buildbot-www-0.9.0.post1.tar.gz

    描述中提到"python库",意味着这个`buildbot-www`是用于Python编程的一个工具或模块,提供了特定的功能或服务,可以帮助开发者构建、测试或管理他们的项目。资源全名"buildbot-www-0.9.0.post1.tar.gz"进一步确认了...

    Python库 | buildbot-washer-1.2.0.tar.gz

    `buildbot-washer` 是一个专门针对Python的持续集成工具 `Buildbot` 的扩展库,版本为1.2.0,封装在`.tar.gz`格式的压缩包中。这个库主要用于清理和标准化Buildbot的构建结果,确保构建过程的稳定性和一致性。它体现...

    PyPI 官网下载 | buildbot-worker-2.4.0.tar.gz

    `Buildbot`是一个持续集成(Continuous Integration, CI)工具,用于自动化软件构建、测试和发布流程。它支持多平台,并且具有高度可配置性,允许开发者根据项目需求定制CI/CD流程。`Buildbot`由三部分组成:master...

    buildbot-slave-0.8.5

    Buildbot Slave 0.8.5 是一个开源的持续集成工具Buildbot的一部分,主要负责在远程机器上执行构建和测试任务。Buildbot是一款强大的自动化构建系统,旨在帮助软件开发团队实现持续集成,确保代码的质量和稳定性。它...

    Python库 | buildbot-pkg-1.7.0.tar.gz

    今天我们将聚焦于一个名为Buildbot的Python库,通过分析其1.7.0版本的源代码包`buildbot-pkg-1.7.0.tar.gz`,来深入探讨这个自动化构建和测试工具的内在奥秘。 首先,Buildbot是一个开源的持续集成系统,它的主要...

    buildbot-waterfall-view-feedstock:一个conda-smithy仓库,用于buildbot-waterfall-view

    关于buildbot瀑布视图 主页: : 套件授权:GPL-2.0或更高版本 原料许可证: 摘要:Buildbot Waterfall View插件 文档: : ...可以列出平台上可用的所有buildbot-waterfall-view版本, buildbot-water

    PyPI 官网下载 | buildbot-0.9.9.tar.gz

    总结起来,`buildbot-0.9.9.tar.gz`是Buildbot的一个旧版本,它提供了一套强大的持续集成解决方案,支持分布式构建,可适应云环境,并能与其他Python库和工具无缝集成。通过配置和扩展,可以满足各种项目的需求,...

    PyPI 官网下载 | ci-buildbot-0.2.5.tar.gz

    总的来说,`ci-buildbot-0.2.5.tar.gz`是一个可以从PyPI获取的Python库,用于构建和管理持续集成和持续部署的流程。通过了解如何下载、解压、安装和使用这个库,开发者可以提升他们的自动化测试和部署能力,提高软件...

    Python库 | buildbot-2.8.1.tar.gz

    总的来说,`buildbot-2.8.1` 是一个强大的持续集成工具,对于Python项目而言,它能够提供一套完整的自动化构建和测试解决方案,帮助团队提高开发效率,确保软件质量。通过学习和掌握buildbot的使用,开发者可以更好...

    Python库 | buildbot-0.9.3.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:buildbot-0.9.3.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Python库 | buildbot-wsgi-dashboards-1.5.0.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:buildbot-wsgi-dashboards-1.5.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    buildbot-UnrealEngine:Buildbot插件,可使用虚幻自动化工具运行命令

    buildbot-虚幻引擎 Buildbot插件以使用虚幻自动化工具运行命令 安装 pip install buildbot_UnrealEngine 这将其他步骤命令作为buildbot内的插件启用(通过from buildbot.plugins import steps ) 用法 from buildbot...

    Python库 | buildbot-0.9.0.post1.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:buildbot-0.9.0.post1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    buildbot-openxt

    OpenXT自动构建器 配置 创建Buildbot主文件: buildbot@master $ buildbot create-master -r buildbot@master $ git clone https://github.com/eric-ch/openxt-buildbot.git . 您将需要通过编辑master.cfg来注册...

    docker-buildbot-slave:提供BuildBot从站的Docker容器

    HOST -BuildBot主服务器的主机名NAME奴隶的名字PASSWORD -用于与主服务器进行身份验证的密码还有两个其他(可选)变量: PORT用于连接主机的端口EMAIL主Web界面中显示的电子邮件地址以下示例启动一个从属实例:...

Global site tag (gtag.js) - Google Analytics