<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
><channel><title>群英汇博客 &#187; CruiseControl</title> <atom:link href="http://blog.ossxp.com/tag/cruisecontrol/feed/" rel="self" type="application/rss+xml" /><link>http://blog.ossxp.com</link> <description></description> <lastBuildDate>Wed, 14 Sep 2011 03:52:03 +0000</lastBuildDate> <generator>http://wordpress.org/?v=2.9.2</generator> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <item><title>剥离CruiseControl dashboard控制台到Debian安装的tomcat6上</title><link>http://blog.ossxp.com/2010/01/391/</link> <comments>http://blog.ossxp.com/2010/01/391/#comments</comments> <pubDate>Sat, 23 Jan 2010 04:52:10 +0000</pubDate> <dc:creator>王胜</dc:creator> <category><![CDATA[持续集成]]></category> <category><![CDATA[CruiseControl]]></category> <category><![CDATA[Debian]]></category> <category><![CDATA[Tomcat]]></category><guid
isPermaLink="false">http://blog.ossxp.com/?p=391</guid> <description><![CDATA[在前篇日志 如何剥离CruiseControl内置的Web控制台 中，我已经介绍过怎么剥离CruiseControl内置的控制台dashboard到tomcat6容器中。但那篇日志中介绍的是用下载压缩包方式安装的tomcat6，在这我向大家介绍一下如何用Debian包安装的tomcat6部署dashbaord控制台。
为什么这两种安装tomcat6的方法会给web部署带来异同呢？原因是，用Debian包安装的tomcat6默认启动了tomcat6 的SecurityManager，这时对于部署在它上面的应用代码进行权限管理，当你的web应用在/WEB-INF/lib或者/WEB-INF/classes目录下加入了第三方或个人的jar包/类库，但没有在/etc/tomcat6/policy.d目录下的安全策略文件中加入访问权限控制，那么你的web应用就不能正常启动，会出现一些意想不到的错误。可参见我的另一篇日志 Dashboard不能运行在Debian包安装的Tomcat6上？
而用解压包安装的tomcat6默认情况下是不启用SecurityManager，比如你运行
CATALIAN_ROOT/bin$ ./startup.sh
就不会启用SecurityManager。如果你想启用SecurityManager，可运行
$CATALINA_HOME/bin/catalina.sh start -security(Unix)
CATALINA_HOME%\bin\catalina start -security      (Windows)
下面就说下用Debian包安装的tomcat6部署dashbaord控制台的步骤:
1、部署dashbaord web应用
将dashbaord项目拷到 /var/lib/tomcat6/webapps目录下
2、编辑 /etc/tomcat6/policy.d/50local.policy 安全策略文件，加入以下几行
// The permissions granted to the context WEB-INF/classes directory
grant codeBase "file:${catalina.base}/webapps/dashboard/WEB-INF/classes/-" {
permission java.security.AllPermission;
};// The permissions granted to the context WEB-INF/lib directory
grant codeBase "file:${catalina.base}/webapps/dashboard/WEB-INF/lib/-" {
permission java.security.AllPermission;
};
3、修改 dashboard-config.xml配置文件，下面是修改后的文件(粗体部分是修改的内容)
&#60;dashboard&#62;
&#60;buildloop
logsdir="/PATH/TO/CC/logs"
<a
href="http://blog.ossxp.com/2010/01/391/" class="more-link">阅读全部内容 &#187;</a>]]></description> <wfw:commentRss>http://blog.ossxp.com/2010/01/391/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Dashboard不能运行在Debian包安装的Tomcat6上？</title><link>http://blog.ossxp.com/2010/01/385/</link> <comments>http://blog.ossxp.com/2010/01/385/#comments</comments> <pubDate>Fri, 22 Jan 2010 16:01:04 +0000</pubDate> <dc:creator>王胜</dc:creator> <category><![CDATA[持续集成]]></category> <category><![CDATA[CruiseControl]]></category> <category><![CDATA[Debian]]></category> <category><![CDATA[Tomcat]]></category><guid
isPermaLink="false">http://blog.ossxp.com/?p=385</guid> <description><![CDATA[前面的一篇日志中我已经介绍了如何把CruiseControl的dashboard Web控制台剥离到tomcat6上。但那时介绍剥离时用的是下载tomcat6压缩包然后解压的tomcat6，并没有Debian 自己提供的tomcat6安装包。或许你会问怎么不直接用Debian提供软件包安装呢？其实不是我不想，只是我实验过用
sudo aptitude install tomcat6
直接安装tomcat6，但是无论如何就是不能成功部署dashboard。 :-?
最终只能委曲求全，“另辟蹊径”了。
但今天同事也遇到这样的问题了，看来是时候解决这个问题了。刚开始我以为是缺少了什么jar包之类的类库，于是分别比较了这两种tomcat所有到的所有类库，发现没有缺少。这时才意识到自己的判断是错误的，然后就转向跟踪tomcat6的日志文件，发现了下面信息：
严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
java.lang.ExceptionInInitializerError
at org.springframework.web.context.ContextLoader.&#60;init&#62;(ContextLoader.java:142)
at org.springframework.web.context.ContextLoaderListener.createContextLoader(ContextLoaderListener.java:57)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:48)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3934)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4429)
at org.apache.catalina.manager.ManagerServlet.start(ManagerServlet.java:1249)
at org.apache.catalina.manager.HTMLManagerServlet.start(HTMLManagerServlet.java:612)
at org.apache.catalina.manager.HTMLManagerServlet.doGet(HTMLManagerServlet.java:136)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:269)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAsPrivileged(Subject.java:537)
at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:301)
at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:283)
at org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:56)
at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:189)
at java.security.AccessController.doPrivileged(Native Method)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:185)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at <a
href="http://blog.ossxp.com/2010/01/385/" class="more-link">阅读全部内容 &#187;</a>]]></description> <wfw:commentRss>http://blog.ossxp.com/2010/01/385/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>CruiseControl HgVersionParser: no match of</title><link>http://blog.ossxp.com/2010/01/329/</link> <comments>http://blog.ossxp.com/2010/01/329/#comments</comments> <pubDate>Fri, 22 Jan 2010 05:45:02 +0000</pubDate> <dc:creator>崔 锐</dc:creator> <category><![CDATA[Hg]]></category> <category><![CDATA[持续集成]]></category> <category><![CDATA[CruiseControl]]></category><guid
isPermaLink="false">http://blog.ossxp.com/?p=329</guid> <description><![CDATA[
使用开源CruiseControl的时候，SCM工具是Mercurial(hg)。CC在收集hg库的修改集合信息的时候，解析hg的version总是出错。这个问题困扰我很长时间，昨天终于解决了。Error executing mercurial version command hg version项目构建的时候总是出现这个错误:
Error executing mercurial version command hg version具体错误信息如下:
net.sourceforge.cruisecontrol.CruiseControlException: java.text.ParseException: HgVersionParser: no match of 分布式软件配置管理工具 - 水银 (版本 1.4.1)
apper.run(ProjectWrapper.java:69)
at java.lang.Thread.run(Thread.java:619)错误原因
通过研究CruiseControl源代码Mercurial.java文件，终于找到了错误原因。其中Mercurial.java有这么一段代码去得到hg的version:
Pattern p = Pattern.compile("Mercurial Distributed SCM \\((.*)\\)");
Matcher m = p.matcher(versionLine);
if (!m.matches()) {
throw new ParseException("HgVersionParser: no match of " + versionLine, 0);
}在系统终端依次输入:
$ hg version
$ LANGUAGE=C hg versionhg version得到的返回结果是:
分布式软件配置管理工具 - 水银 <a
href="http://blog.ossxp.com/2010/01/329/" class="more-link">阅读全部内容 &#187;</a>]]></description> <wfw:commentRss>http://blog.ossxp.com/2010/01/329/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>如何剥离CruiseControl内置的Web控制台</title><link>http://blog.ossxp.com/2010/01/199/</link> <comments>http://blog.ossxp.com/2010/01/199/#comments</comments> <pubDate>Thu, 14 Jan 2010 07:25:35 +0000</pubDate> <dc:creator>王胜</dc:creator> <category><![CDATA[持续集成]]></category> <category><![CDATA[CruiseControl]]></category><guid
isPermaLink="false">http://blog.ossxp.com/?p=199</guid> <description><![CDATA[背景介绍
出于各自不同的考虑：启用 Apache Tomcat 内置的 Java EE 安全性管理机制，以加强这些 Web 控制台的管理
采用比 Jettery (cc内置的Web容器)  更强大的 Web 容器，使得 CruiseControl 构建循环不会受到 Web 控制台用户的影响。因为默认情况下，CruiseControl构建循环与宿主 Web 控制台的 Jetty 处于同一进程中。CI集成人员需要将CruiseControl内置的两个Web控制台( http://localhost:8080/cruisecontrol/ 和 http://localhost:8080/dashboard/ ) 剥离出来，并运行在其他 Java EE 容器中，比如 Tomcat等。
移植Web 控制台到 Apache Tomcat 6.0.20 的步骤
如果你想用Debian 安装的tomcat6部署dashboard，请参照 剥离CruiseControl dashboard控制台到Debian安装的tomcat6上1、下载 CruiseControl 和 tomcat-6.0.20 安装包，并分别解压（这是我放置解压目录的位置 /work/cruisecontrol 和 /work/tomcat )。
2、复制 /work/cruisecontrol/webapps/dashboard 到 /work/tomcat/webapps下
/work/tomcat/webapps&#62; cp -a /work/cruisecontrol/webapps/dashboard .
3、修改 /work/cruisecontrol/dashboard-config.xml <a
href="http://blog.ossxp.com/2010/01/199/" class="more-link">阅读全部内容 &#187;</a>]]></description> <wfw:commentRss>http://blog.ossxp.com/2010/01/199/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>velocity 未列入文档的秘密</title><link>http://blog.ossxp.com/2010/01/192/</link> <comments>http://blog.ossxp.com/2010/01/192/#comments</comments> <pubDate>Wed, 13 Jan 2010 13:06:54 +0000</pubDate> <dc:creator>崔 锐</dc:creator> <category><![CDATA[技术文章]]></category> <category><![CDATA[持续集成]]></category> <category><![CDATA[CruiseControl]]></category> <category><![CDATA[java]]></category> <category><![CDATA[Velocity]]></category><guid
isPermaLink="false">http://blog.ossxp.com/?p=192</guid> <description><![CDATA[Velocity小技巧
今天，在Velocity模板对i18n字符串进行处理，需要转换小写和将空格替换为下划线。一般情况下，从java代码中通过Context传递是最简单的，但是有的情况，不现实。在CC的模板中，就有这样的情况
下面是一个在模板中实现字符串转换的具体例子：#set( $tab_title = "#springMessage('Build.Log')" )
&#60;div id="$tab_title.toLowerCase().replace(' ', '_')" class="widget"
$log_extra_attrs&#62;
&#60;h2&#62;$tab_title&#60;/h2&#62;
&#60;span class="logfile"&#62;&#60;a
href="$req.getContextPath()/tab/build/download/log/$projectName/$logfile"&#62;#springMessage('Download.log')
&#60;/a&#62;&#60;/span&#62;
&#60;/div&#62;Velocity
Velocity是基于Java的模板引擎。它允许Web页面开发者引用Java代码中定义的方法。Web设计者可以和Java程序开发者并行开发遵循MVC模式的Web站点。这意味着，Web设计者可以将精力放在好的Web站点设计上，而Java程序开发者可以将精力放在编写代码上。Velocity将Java代码从Web页面中分离，使Web站点更具长期可维护性，并提供了一种替代JSP或PHP的方案
如果有感兴趣的可以看看 Velocity英文文档 .]]></description> <wfw:commentRss>http://blog.ossxp.com/2010/01/192/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>CruiseControl&#8212;confilg.xml</title><link>http://blog.ossxp.com/2010/01/173/</link> <comments>http://blog.ossxp.com/2010/01/173/#comments</comments> <pubDate>Tue, 12 Jan 2010 13:40:15 +0000</pubDate> <dc:creator>崔 锐</dc:creator> <category><![CDATA[持续集成]]></category> <category><![CDATA[未分类]]></category> <category><![CDATA[CruiseControl]]></category><guid
isPermaLink="false">http://blog.ossxp.com/?p=173</guid> <description><![CDATA[config.xml
config.xml是CruiseControl的核心配置，主要指明需要测试的项目名，项目的执行脚本，监听变更集，执行任务，以及任务完成后的后续操作。下面是CruiseControl中实例config.xml
&#60;cruisecontrol&#62;
&#60;project name="connectfour"&#62;
&#60;listeners&#62;
&#60;currentbuildstatuslistener file="logs/${project.name}/status.txt"/&#62;
&#60;/listeners&#62;
&#60;bootstrappers&#62;
&#60;antbootstrapper <a
href="http://blog.ossxp.com/2010/01/173/" class="more-link">阅读全部内容 &#187;</a>]]></description> <wfw:commentRss>http://blog.ossxp.com/2010/01/173/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>CruiseControl&#8212;下载及安装</title><link>http://blog.ossxp.com/2010/01/51/</link> <comments>http://blog.ossxp.com/2010/01/51/#comments</comments> <pubDate>Thu, 07 Jan 2010 12:13:23 +0000</pubDate> <dc:creator>崔 锐</dc:creator> <category><![CDATA[持续集成]]></category> <category><![CDATA[CruiseControl]]></category><guid
isPermaLink="false">http://blog.ossxp.com/?p=51</guid> <description><![CDATA[
最新稳定版本cruisecontrol-bin-2.8.2.zip ,   ﻿﻿http://cruisecontrol.sourceforge.net/download.html
解压刚下载的压缩包：        $ unzip cruisecontrol-bin-2.8.2.zip
输入 $  echo  $JAVA_HOME  查看是否设置好环境变量
启动CruiseControl,进入解压目录下，运行： $   . /cruisecontrol.sh
在浏览器输入： localhost:8080/dashboardCruiseControl 目录结构cruisecontrol.sh      启动文件;
config.xml                 配置文件  (默认的配置文件名称);
apache-ant-1.7.0     是CruiseControl自带的ant环境，CruiseControl要借助ant完成一些指定的任务;
docs                          包括CruiseControl的使用文档和一个helloworld的使用范例;
lib                              是运行需要的jar包;
logs                          日志目录,构建时产生的log存储于此;
projects                    需要构建的项目所在目录，所有的构建项目在project均以项目名为目录（示例项目 connectfour）。
webapps                 web应用目录。CruiseControl内置了jetty作为web容器，可以通过http://localhost:8080/dashboard
artifacts                    输出目录，集成后生成的jar就保存在这里]]></description> <wfw:commentRss>http://blog.ossxp.com/2010/01/51/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>CruiseControl &#8212;初体验</title><link>http://blog.ossxp.com/2010/01/32/</link> <comments>http://blog.ossxp.com/2010/01/32/#comments</comments> <pubDate>Thu, 07 Jan 2010 01:10:04 +0000</pubDate> <dc:creator>崔 锐</dc:creator> <category><![CDATA[持续集成]]></category> <category><![CDATA[CruiseControl]]></category><guid
isPermaLink="false">http://blog.ossxp.com/?p=32</guid> <description><![CDATA[CruiseControl：简称CC，持续集成工具，主要提供了基于版本管理工具(如Git)感知变化或每天定时的持续集成，并提供持续集成报告、Email等等方式通知相关负责人，其要求是需要进行日构建的项目已编写好全自动的项目编译脚本(可基于Rake或Ant）
CruiseControl 有三个模块构成 ：构建循环（Build Loop) ：CC 的核心，负责触发构建周期，并通知构建结果
老版本Web控制台(/cruiscontrol)
新一代Web控制台(/dashboard) ：用于取代老版本的cruisecontrol控制台]]></description> <wfw:commentRss>http://blog.ossxp.com/2010/01/32/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk
Page Caching using disk (user agent is rejected)
Database Caching using disk

Served from: blog.ossxp.com @ 2012-02-09 17:59:45 -->
