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

[经验分享] [CruiseControl]在Linux上的配置实例

[复制链接]

尚未签到

发表于 2017-3-1 07:07:19 | 显示全部楼层 |阅读模式
  转自:http://www.blogjava.net/lihao336/archive/2010/06/29/324822.html
  
  CruiseControl配置说明
  

  CruiseControl是一个持续集成工具,持续集成是一个很好的敏捷实践。在项目中搭建CruiseControl环境,通过执行频繁的项目构建,及时暴露出隐藏的Bug,从而减少定位以及修改Bug的时间和代价。本文介绍了配置CruiseControl的步骤。配置环境为Ubuntu 9.10CruiseControl 2.8.3 Binary,版本管理工具为SVN
  

  一.准备工作
  1.配置Java环境
  calvin@calvin-desktop:~$ sudo gedit /etc/profile
  在文件末尾添加Java环境变量:
  #set java environment
  export JAVA_HOME=/home/calvin/development/jdk
  export JRE_HOME=/home/calvin/development/jdk/jre
  export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
  export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
  登出再登入生效。
  

  2.解压CruiseControl
  解压到CruiseControl-2.8.3-bin.zip /home/calvin/development/cruisecontrol/cruisecontrol-bin-2.8.3中,其中三个值得注意的目录是:
  目录         内容
  projects        存放CruiseControl从源代码仓库中检出的代码。
  logs             存放构建报告和日志。
  artifacts        存放构建成功后产生的输出文件(如jar包,apk包等)。
  

  3.SVN仓库中checkout出源码
  CruiseControl第一次不支持自动检出代码,所以在构建项目之前要先把项目代码手工checkout到本地。本文假设项目名为sampleprojectSVN源代码仓库位于/home/calvin/development/cruisecontrol/DemoSystem/repositoryserver/svnrepository中。

  •   安装subversion客户端
  calvin@calvin-desktop:~$ sudo apt-get install subversion
  


  •   project目录下新建sampleproject文件夹,用来存放准备build的工程。
  calvin@calvin-desktop:~/development/cruisecontrol/cruisecontrol-bin-2.8.3/projects$ mkdir sampleproject
  calvin@calvin-desktop:~/development/cruisecontrol/cruisecontrol-bin-2.8.3/projects$ svn checkout file:////home/calvin/development/cruisecontrol/DemoSystem/repositoryserver/svnrepository sampleproject
  

  二.配置config.xml
  cruisecontrol根据config.xml中配置的项目信息执行构建。


<cruisecontrol>
    <!-- 这里的name应该和projects目录下的项目名一致 -->
    <project name="sampleproject">
        <!--监听项目状态的变化 -->
        <listeners>
            <currentbuildstatuslistener file="logs/${project.name}/status.txt"/>
        </listeners>
        <!-- build之前从svn服务器上更新本地代码 -->
        <bootstrappers>
            <svnbootstrapper localWorkingCopy="projects/${project.name}/trunk" />
        </bootstrappers>
        <modificationset quietperiod="30">
            <svn localWorkingCopy="projects/${project.name}/trunk" />
        </modificationset>
        <!-- 设定每隔interval秒,CruiseControl去检查并执行一次构建 -->
        <schedule interval="60">
            <ant anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/trunk/build.xml" target="all"/>
        </schedule>
        <!-- 发布构建结果 -->
        <publishers>
            <onsuccess>
                <!-- 将构建的结果(如jar包,apk包等)发布到指定的位置 -->
                <artifactspublisher dir="projects/${project.name}/trunk/dist"
                    dest="../logs/SampleCCProject" />
            </onsuccess>
            <!--htmlemail buildresultsurl="http://211.94.155.199:8080/cruisecontrol/buildresults/mobiletv  mailhost="localhost" returnname="CruiseControl result" returnaddress="localhost@localhost"-->
                <!--failure address="caojie@cienet.com.cn" />
                <success address="${mail.address.mobiletv" />
            </htmlemail>
            <htmlemail>
                <success address="${mail.address.mobiletv}"/>
                <failure address="caojie@cienet.com.cn"/>
            </htmlemail>-->            
            <email mailhost="smtp.263xmail.com"
                   returnaddress="calvinlee@cienet.com.cn"
                   skipusers="true"
                  reportsuccess="fixes"
                  subjectprefix="[CruiseControl]"
                  buildresultsurl="http://buildserver:8080/cruisecontrol/buildresults">
                  <failure address="calvinlee@cienet.com.cn" />
                  <success address="calvinlee@cienet.com.cn" />
            </email>
        </publishers>
    </project>
</cruisecontrol>
  .配置cruisecontrol.sh
  cruisecontrol.shcruisecontrol的启动脚本,通过这个脚本中初始化一些环境变量,开始执行build loop,并开启jetty服务器。
  打开cruisecontrol.sh,在文件末尾找到
  $JAVA_HOME/bin/java $CC_OPTS -Djavax.management.builder.initial=mx4j.server.MX4JMBeanServerBuilder "-Dcc.library.dir=$LIBDIR" "-Djetty.logs=$JETTY_LOGS" -jar "$LAUNCHER" $@ -jmxport 8000 -webport 8080 -rmiport 1099 &
  去掉 & 符号,这样启动cruisecontrol时,阻止将其放到后台执行,要关闭cruisecontrol时,按下 Ctrl+C 即可。
  修改-jmxport-webport-rmiport等参数可以自定义项目构建结果的发布端口。
  

  PS:
  如果项目的log文件比较大,或者构建时使用内存较多,可以在cruisecontrol.sh中增加JAVA命令行参数,扩大JVM的内存,以免出现OutOfMemory错误:
  CC_OPTS="-Xms128m -Xmx256m"
  

  .配置dashboard-config.xml
  dashboard用来显示cruisecontrol管理的所有项目的构建状态信息。
  dashboard-config.xml用来配置dashboard的显示,其中,配置<features allowforcebuild="true"/>,那么在每个项目的右侧有一个按钮,单击该按钮将强迫该项目进行构建,而不必等到其下一次检查,也不必等到它有版本变化。
  


<dashboard>
  
<buildloop   logsdir="" artifactsdir="" />
  <features allowforcebuild="true"/>
  <trackingtool projectname="" baseurl="" keywords=""/>
  
<subtabs>
   
<subtab class="net.sourceforge.cruisecontrol.dashboard.widgets.ErrorsAndWarningsMessagesWidget" />
  </subtabs>
</dashboard>
  
  
  .运行cruisecontrol
  1.cruisecontrol.sh 添加执行权限
  calvin@calvin-desktop:~/development/cruisecontrol/cruisecontrol-bin-2.8.3$ sudo chmod +x cruisecontrol.sh
  2.运行 cruisecontrol.sh 脚本
  calvin@calvin-desktop:~/development/cruisecontrol/cruisecontrol-bin-2.8.3$ ./cruisecontrol.sh
  

  .查看项目构建结果
  1.通过http://localhost:8080/dashboard/ 访问项目构建结果。
  其中,项目有三种状态:
  Discontinued:表示CruiseControl可以找到该项目的日志文件,但在config.xml中并没有配置该项目,这种情况下CruiseControl不会去构建它。
  Inactive:表示在config.xml中配置了该项目,但是没有发现关于这个项目的Log信息,即在CruiseControl的日志目录中还没有该项目的日志文件,或日志文件被人为删除了。CruiseControl会根据配置信息对这个项目进行检查新版本并进行构建。
  Active:表示CruiseControl即可以找到该项目的日志文件,又在config.xml中可以发现它。此时,这个项目可能是构建成功,也可能是构建失败,还可能是构建中。
  2.通过http://localhost:8080/cruisecontrol/ 查看项目构建计划

运维网声明 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-348495-1-1.html 上篇帖子: 优化GeoServer的运行 下篇帖子: Comet技术选择,论Is node.js best for Comet?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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