设为首页 收藏本站
查看: 1003|回复: 0

[经验分享] 使用SVN+CruiseControl+ANT实现持续集成之二----环境搭建和配置介绍

[复制链接]

尚未签到

发表于 2017-2-28 10:45:06 | 显示全部楼层 |阅读模式
使用CruiseControl+SVN+ANT实现持续集成之二
--环境搭建和配置介绍

  1. 环境搭建
1.1. 下载及目录介绍

  从官方站点http://cruisecontrol.sourceforge.net/download.html下载一份最新的 CC 压缩包,最新的版本号为2.8.4
DSC0000.jpg

下载了cruisecontrol-bin-2.8.4.zip 直接解压到E盘下,文件结构如下图:
DSC0001.jpg


  • apache-ant-1.7.0:CC中使用ANT工具
  • artifacts:CC编译生成发布包
  • etc:自带容器Jetty对应的配置文件
  • lib:自带容器Jetty所需要到的Jar包
  • logs:各项目生成日志存在文件夹
  • projects:存放各项目文件目录,进行程序的编译
  • webapps:CC自带应用程序存放目录
  • cc-config:用于CC环境变量配置
  • cruisecontrol:主应用程序CC目录
  • dashboard:用于编译结果发布程序
  • documentation:CC相关文档
  • config.xml:用于CC编译配置文件,通过修改配置文件引入不同的插件,执行不同的编译流程
  • cruisecontrol.bat:在WINDOWS环境下进行启用CC批处理脚本
  • cruisecontrol.sh:在Linux等环境下启动CC脚本
  • dashboard-config.xml:Dashboard配置文件
  
1.2. 运行环境
使用JAVA开发的CC,当然需要运行在JDK下并通过Web容器进行发布,具体要求如下:

  • CC需要运行在至少JDK 1.4环境中,在环境变量中设置有JAVA_HOME,并把java/bin加入到path中;
  • CC已经内建集成了ANT,不需要单独引入;
  • CC可以运行在多种应用服务器中,在自带压缩包中捆绑了一个开源应用服务器,那就是Jetty 6,下面为了尽快建立我们的环境,以下将使用该容器。

  
1.3. 快速启动CC
运行根目录下批处理文件cruisecontrol.bat,出现如下界面:
DSC0002.jpg

运行成功后,我们可以在浏览器输入 http://localhost:8080/cruisecontrol/ 来验证一下结果(采用Jetty默认的设置,端口号为 8080)
DSC0003.jpg

如果看到上图结果,恭喜你已经成功启动CC。
另外CC提供了更加人性化结果展示Dashboard界面,在浏览器输入 http://localhost:8080/dashboard/
DSC0004.jpg

  
2. 配置介绍
当CC服务器启动时,会自动检测配置信息中的任务信息,并对其进行校验和初始化,之后所有的工作,都是依据该配置信息进行的。
CC的配置使用了其安装目录下的config.xml文件,我们可以通过文本编辑器打开该配置文件,编辑各种配置信息。配置信息的定义遵循了标准XML文件格式,同时遵循了ANT自动构建配置信息的规则。
2.1. config.xml


1 <cruisecontrol>
2 <project name="connectfour">
3
4     <!-- 用来访问项目当前创建的状态   file: 指定了状态文件的位置 -->
5     <listeners>
6             <currentbuildstatuslistener file="logs/${project.name}/status.txt"/>
7         </listeners>
8
9         <!-- 在 CC 进行创建之前运行,创建前的准备工作 -->
10          <bootstrappers>
11             <!-- 从源码控制系统更新本地文件: cvsbootstrappers、vssbootstrappers、svnbootstrapper -->
12                 <antbootstrapper anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/build.xml" target="clean" />
13          </bootstrappers>
14
15         <!-- 检查各个源码控制系统中是否发生变化;quietperiod: 单位为秒 设定等待的时间 -->
16         <!-- 第一次的取出工作为手动执行 -->
17          <modificationset quietperiod="30">
18             <!-- touch any file in connectfour project to trigger a build -->
19             <filesystem folder="projects/${project.name}"/>
20          </modificationset>
21     
22         <!-- 指定了构建的时间间隔 单位为秒-->
23          <schedule interval="300">
24             <ant anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/build.xml"/>
25          </schedule>
26
27         <!-- 指定项目日志保存的地点 -->
28          <log>
29             <merge dir="projects/${project.name}/target/test-results"/>
30          </log>
31
32         <!-- 在 build loop 结束之后运行,发布 build 的结果 -->
33         <publishers>
34             <onsuccess>
35               <!--用于对创建过程中产生的人工制品进行发布-->
36                 <artifactspublisher dest="artifacts/${project.name}" file="projects/${project.name}/target/${project.name}.jar"/>
37             </onsuccess>
38
39        <!--
40           mailhost=邮件主机
41           returnname=发件人
42           returnaddress=发件地址
43           defaultsuffix=默认邮件后缀
44         -->
45         <htmlemail
46           charset="UTF-8"
47           mailhost="test163.com"
48           defaultsuffix="@xxx.com"
49           username="xxx@163.com"
50           password="xxx"
51           returnname="CruiseControl"
52           returnaddress="xxx@163.com"
53           subjectprefix="构建日志"
54           xsldir="webapps/cruisecontrol/xsl"
55           css="webapps/cruisecontrol/css/cruisecontrol.css">
56           <always address="xxx@xxx.com.cn"/>
57           <failure address="xxx@xxx,yyy@yyy.com.cn"/>            
58         </htmlemail>
59         </publishers>
60     </project>
61 </cruisecontrol>
  2.2. build.xml


1 <!&#8212;调用ANT执行集成流程,包括清空目录、编译、休眠、测试、打包 -->
2 <project name="connectfour" default="all">
3     <target name="all" depends="clean, compile, sleep, test, jar"/>
4
5     <!-- 1. 删除根目录下target 目录-->
6     <target name="clean">
7         <delete dir="target" quiet="true" />
8     </target>
9
10     <!-- 2. 编译程序,创建目录并编译程序,编译输出为target/classes目录下-->
11     <target name="compile">
12         <mkdir dir="target/classes"/>
13         <javac srcdir="src" destdir="target/classes"/>
14     </target>
15
16     <!-- 3. 在创建前等待60秒,用于Dashboard观察进程-->
17     <target name="sleep">
18         <echo message="Sleeping for a while so you can see the build in the new dashboard" />
19         <sleep seconds="60" />
20     </target>
21
22     <!-- 4. 进行自动化测试,依赖任务为compile-->
23     <target name="test" depends="compile">
24         <mkdir dir="target/test-classes"/>
25         <!&#8212;调用junit进行自动化测试-->
26         <javac srcdir="test" destdir="target/test-classes">
27             <classpath>
28                 <pathelement location="target/classes"/>
29                 <pathelement location="lib/junit.jar"/>
30             </classpath>
31         </javac>
32
33         <!&#8212;创建测试结果存放目录-->
34         <mkdir dir="target/test-results"/>
35         <junit haltonfailure="no" printsummary="on">
36             <classpath >
37                 <pathelement location="target/classes"/>
38                 <pathelement location="lib/junit.jar"/>
39                 <pathelement location="target/test-classes"/>
40             </classpath>
41             <formatter type="brief" usefile="false"/>
42             <formatter type="xml" />
43
44             <!&#8212;测试文件所在文件地址-->
45             <batchtest todir="target/test-results" >
46                 <fileset dir="target/test-classes" includes="**/*Test.class"/>
47             </batchtest>
48         </junit>
49     </target>
50
51     <!-- 5. 程序打包,依赖与compile任务-->
52     <target name="jar" depends="compile">
53         <jar jarfile="target/connectfour.jar" basedir="target/classes"/>
54     </target>
55 </project>  
2.3. 执行配置解析
     一个持续集成项目是从project节点开始的,对该项目进行的操作都会作为子节点存在与该根节点之下。对于每一个project节点,CC系统都会将其当作一个处理单元,并在最初建立该项目的时候进行初始化操作。
     name是project节点常用的属性,也是必设且值唯一的属性,该属性的值会在整个CC系统使用,包括配置文件的${project.name}变量值。
     在一个项目节点中,我们可以定义监听器、本地目录位置、变更轮询目录位置、轮询间隔、任务执行、单元测试、日志记录等多种项目操作,同时CC系统支持插件扩展功能,这些扩展插件可以直接在一个项目中使用。
2.3.1. 轮询版本控制系统
     版本库轮询机制是使用modificationset进行配置的。CC系统内置的轮询模块会根据设定的时间段对版本库进行检测,一旦发现版本库发生变更,就会调用Check Out Build Test Publish等一系列的操作,对最新的代码进行集成,并运行一系列预先设定的任务。
     CC支持十多种版本控制系统,比如CVS、SVN、Starteam、VSS等,对这些版本控制系统的调用,只需要配置相应的节点名称即可。本文以SVN版本管理系统为例。在modificationset节中,我们看到唯一的一个子节点:


<svn localWorkingCopy="projects/CM/${project.name}/src/${project.name}"/>  该节点使用了svn关键字,表示当前工程使用的版本控制系统是SVN,localWorkingCopy属性的值是告诉CC本地的拷贝目录,其余的工作则由CC内置的操作模块进行。
2.3.2. 执行构建脚本
     实质上,执行构建脚本也是CC的一个可定制任务,但由于自动构建是持续集成的一个重要组成部分,因此在此单独提出。
     CC的自动构建是使用ANT工具来进行的,当然我们也可以使用其它的自动构建工具来替代(比如Maven),这些的工具仅仅是体现在一个任务配置语句上,在此,以ANT工具为例。
     在schedule节,我们同样使用了一个子节点来描述自动构建工作:


<ant anthome="ant6" buildfile="projects/CM/${project.name}/src/${project.name}/build.xml"/>  该节点使用了ant关键字,表示该任务使用了ant来进行自动构建任务,anthome属性则指定了ANT工具的具体位置,buildfile属性则指定了ANT进行自动构建所使用的配置文件Build.xml文件的路径。
     这样,在CC决定进行自动构建任务时,会根据设定找到执行所使用到的信息。
2.3.3. 执行单元测试
     CC可以自动侦测自动构建配置文件中单元测试的任务,并在代码集成完毕将执行结果反馈到相应的模块。
     ANT支持xUnit系列的单元测试框架,只需要在配置文件中加入一个target节,即可在自动构建完成之后,进行单元测试工作,有关的详细配置,请参阅ANT官方文档。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-348331-1-1.html 上篇帖子: Appfuse中文乱码解决 下篇帖子: Solr3.5安装测试指南yzn
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表