持续集成搭建及使用心得——基于hudson

2012-03-23  胡志超 


本文采用的持续集成( CI )工具为 hudson( 版本号 2.0.0) ,代码质量检查工具采用 sonar(版本号2.8),数据库采用 MySQL 社区版 ( 版本号 5.5.11b ),主服务器环境
持续集成搭建及使用心得
本文采用的持续集成(CI)工具为hudson(版本号2.0.0),代码质量检查工具采用sonar(版本号2.8),数据库采用MySQL社区版(版本号5.5.11b),主服务器环境为Windows Server 2003 SP3,节点采用SUSE Linux Enterprise Server 10 SP2。
一、Hudson搭建
    先决条件:Java环境可运行,容器(采用Apache Tomcat)可运行,ant命令可运行;
    安装配置:
        1、从官方网站(http://hudson-ci.org/ )下载安装包,一般为一个war文件;
        2、将其部署于容器中,既放到webapps目录下后重启容器;
        3、通过浏览器访问http://IP:PORT/hudson/,确认部署成功;
        4、点击左侧系统管理的中的系统设置,进入设置页面;
        5、配置ant名和本地路径,也可选择自动安装,但需要访问外网权限。其他配置根据实际需要,在此不详细介绍。
    新建任务:
        1、新建任务,根据实际情况选择项目类型,虽然hudson支持中文任务名,但个人建议不用中文,特别是用分布式的时候,中文会导致各种问题。
        2、设置代码库,在Source Code Management下选择相应的库类型,本文以SVN库为例,Repository URL为库地址,Local module directory (optional) 为本地位置,默认为“.”,具体地址为:主目录\job\任务名\workspace,其中主目录可以在系统设置中查到。如果一个任务配置多个SVN地址(我在华为就碰到过将lib目录单独提取出放到另外一个SVN中的情况),其Local module directory配置应当不冲突,如一个SVN库中含有/a/b目录,则其他的SVN库的Local module directory不能设置为./a/b。
        3、设置构建条件,在Build Triggers下选择适应的条件:Build after other projects are built(不解释),Poll SCM对代码库轮询,如果有更新则构建,Build periodically定时构建。其中后两项配置方法在页面帮助里面有。
        4、设置构建方法,本文件采用Invoke Ant,即利用ANT脚本构建。其中Targets 为进行构建的任务,不填则为脚本中默认的任务。Build File 为脚本文件。
        5、配置构建完成后动作,在Post-build Actions下,勾选需要的动作。
二、Sonar搭建
    先决条件:数据库(本文采用MySQL)能正常运行,且有管理员权限。
    安装配置:
        1、从官方网站(http://www.sonarsource.org)下载安装包,并解压;
        2、创建数据库,Sonar默认使用嵌入式Derby数据库,为使用MySQL需首先创建一个sonar/sonar的UTF-8的mysql数据库, 并授权访问sonar库。数据库代码如下:
复制内容到剪贴板
代码:
CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
grant all privileges on sonar.* to 'sonar'@'%' identified by 'sonar';
flush privileges;
3、修改sonar配置文件sonar.properties中连接数据库方式,将原来的连接方式注释掉,启用以下代码;
复制内容到剪贴板
代码:
sonar.jdbc.url: jdbc:mysql://IP:3306/sonar?useUnicode=true&characterEncoding=utf8
sonar.jdbc.driver: com.mysql.jdbc.Driver
sonar.jdbc.validationQuery: select 1
4、利用bin目录下对应的批处理文件,启动sonar,登陆http://IP:9000;查看是否成功。
三、集成
    先决条件 :可以连接外网或者有hudson下的sonar插件和sonar的ant任务包;
    方法:
        1、进入hudson“系统管理”下的“管理插件”页面,如可连接外网,则选择“可选插件”,直接下载安装sonar插件,如果已下载好sonar插件,则选择“高级”,采用上传方式安装。下载地址http://hudson-ci.org/downloads/plugins/sonar/1.6.1/sonar.hpi。
        2、安装完成后,重启容器。
        3、进入“系统管理”下的“系统设置”页面,配置Sonar;
        4、进入项目设置页面,开启该项目sonar功能;
        5、从http://repository.codehaus.org/org/codehaus/sonar-plugins/sonar-ant-task/下载soanr的Ant任务包,放在ant的lib目录下;
        6、声明sonar的全局配置,代码如下
复制内容到剪贴板
代码:
<!-- 增加sonar任务 -->
<taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml">
<classpath path="path/to/lib" />
</taskdef>
<!-- 以下参数可以选 -->
<!-- 连接MySQL数据库 -->
<property key="sonar.jdbc.url"
value="jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8" />
<property key="sonar.jdbc.driverClassName" value="com.mysql.jdbc.Driver" />
<property key="sonar.jdbc.username" value="sonar" />
<property key="sonar.jdbc.password" value="sonar" />
<!-- 如果sonar配置在远程服务上 -->
<property key="sonar.host.url"
value="http://myserver:1234" />
7、定义sonar任务,代码如下
复制内容到剪贴板
代码:
<target name="sonar">
<!-- workDir 是sonar的临时目录 -->
<sonar:sonar workDir="..." key="org.example:example" version="0.1-SNAPSHOT"
xmlns:sonar="antlib:org.sonar.ant">
<!-- 源代码目录 -->
<sources>
<path location="..." />
</sources>
<!-- 可选属性 -->
<property key="sonar.projectName" value="this value overrides the name defined in Ant root node" />
<property key="sonar.dynamicAnalysis" value="false" />
<!-- 测试代码目录(可选) -->
<tests>
<path location="..." />
</tests>
<!-- 已编译的class文件所在目录(可选) -->
<binaries>
<path location="..." />
</binaries>
<!-- lib所在目录,用于findbugs -->
<libraries>
<path location="..." />
</libraries>
</sonar:sonar>
</target>
四、分布式
    原理:默认安装hudson即为主服务器模式,在主服务器部署大量job时,部署节点可提高jobs执行效率。Hudson的分布式任务并不需要在节点上也部署一套hudson环境,而是在建立主服务器与节点之间的连接后发指令让节点执行,节点上会自行从SVN下载代码,并运行本地的脚步文件,但其构建日志依然存在与主服务器。
    先决条件:节点上已能正常运行ant和java。
    方法:
        1、进入主服务器的“系统管理”中的“管理节点”页面;
        2、点击新建节点,输入节点名称和节点类型;
        3、设置节点详细参数,其中of executors为执行数,可配置成CPU个数;Remote FS root为客户端hudson的执行目录;如果节点为专用节点,则将用法调整为“只允许运行绑定到这台机器的Job”,如果节点为分担式的,则用法调整为“尽可能使用这个节点”;
        4、节点机器登陆http://IP:PORT/hudson/computer/节点名/,选择Launch agent from browser on slave,或者下载slave.jar,并运行以下命令;java -jar slave.jar -jnlpUrl http:///IP:PORT/hudson/computer/节点名/slave-agent.jnlp,启动slave端程序;
        5、从主服务器可以看到连接情况。

419°/4192 人阅读/0 条评论 发表评论

登录 后发表评论