目前为止运行的 CruiseControl 安装把每个构建的结果用电子邮件消息发送给开发人员。但是开发过程可能包含不是这些消息收件人的人员 —— 例如,项目管理人员或测试人员。CruiseControl 包含一个简单的 Web 应用程序,可以让这些人员监视持续集成构建。
CruiseControl Web 应用程序在 Apache Tomcat 应用程序服务器中运行,使用的是包含在 Fedora Core 4 发行版中的拷贝。需要安装 tomcat5
和 tomcat5-admin-webapps
包:
[root@fcvm ~]# yum install tomcat5 tomcat5-admin-webapps
[...]
Installed: tomcat5.i386 0:5.0.30-5jpp_6fc tomcat5-admin-webapps.i386 0:5.0.30-5jpp_6fc
Dependency Installed: tomcat5-jasper.i386 0:5.0.30-5jpp_6fc
Complete!
[root@fcvm ~]# |
还需要安装 Java 事务 API(JTA)的一个实现。可以用 JPackage 中(请参阅 参考资料)的 RPM 规范文件构建自己的 JTA RPM,但是最简单的选择就是安装来自 Fedora 仓库的 geronimo-specs
和 geronimo-specs-compat
:
[root@fcvm ~]# rpm -Uvh http://download.fedora.redhat.com/\ pub/fedora/linux/core/development/i386/Fedora/RPMS/\ geronimo-specs-1.0-0.M2.2jpp_4fc.i386.rpm Preparing... ################################### [100%] 1:geronimo-specs ################################### [100%] [root@fcvm ~]# rpm -Uvh http://download.fedora.redhat.com/\ pub/fedora/linux/core/development/i386/Fedora/RPMS/\ geronimo-specs-compat-1.0-0.M2.2jpp_4fc.i386.rpm Preparing... ################################### [100%] 1:geronimo-specs-compat ################################### [100%] [root@fcvm ~]# |
使用默认的 Tomcat 安装,CruiseControl Web 应用程序会找不到合适的 JAXP TransformerFactory
实现,所以需要向选定的类目录添加默认 JAXP XML 转换器:
[root@fcvm ~]# cd /usr/share/tomcat5/common/endorsed [root@fcvm endorsed]# ln -s /usr/share/java/jaxp_transform_impl.jar \ \[jaxp_transform_impl\].jar [root@fcvm endorsed]# ls -l total 12 lrwxrwxrwx 1 root root 36 Sep 19 01:33 [jaxp_parser_impl].jar -> /usr /share/java/jaxp_parser_impl.jar lrwxrwxrwx 1 root root 39 Sep 19 01:47 [jaxp_transform_impl].jar -> / usr/share/java/jaxp_transform_impl.jar lrwxrwxrwx 1 root root 36 Sep 19 01:33 [xml-commons-apis].jar -> /usr /share/java/xml-commons-apis.jar [root@fcvm endorsed]# |
CruiseControl Web 应用程序可以绘制重要的构建统计图,例如成功构建与失败构建的比例。画图的库要使用 Java AWT,所以需要确保 JVM 运行在 headless 模式。要做到这一点,请编辑 /etc/tomcat5/tomcat5.conf 文件,并插入下面这一行:JAVA_OPTS="-Djava.awt.headless=true"
,位置大约在第 10 行。
现在,在 /etc/tomcat5/Catalina/localhost 下创建一个叫作 cruisecontrol.xml 的文件,把 CruiseControl Web 应用程序添加到 Tomcat 的配置。清单 5 显示了这个文件的内容:
清单 5. /etc/tomcat5/Catalina/localhost/cruisecontrol.xml 的内容
<Context path="/cruisecontrol" docBase="/home/cruise/pkg/cruisecontrol-2.2.1/reporting/jsp/d ist/cruisecontrol.war"> <Parameter name="logDir" value="/home/cruise/log/build" override="false"/> <Parameter name="cacheRoot" value="/var/cache/tomcat5/cruisecontrol" override="false"/> </Context> |
请注意,清单 5 中的第二行出于显示的原因进行了回绕。docBase
属性在创建的文件中应该单独占一行。
还需要为 CruiseControl Web 应用程序创建一个保存页面缓存的目录:
[root@fcvm ~]# cd /var/cache/tomcat5 [root@fcvm tomcat5]# mkdir cruisecontrol [root@fcvm tomcat5]# chgrp tomcat cruisecontrol [root@fcvm tomcat5]# chmod g+w cruisecontrol [root@fcvm tomcat5]# ls -l total 24 drwxrwxr-x 2 root tomcat 4096 Sep 16 09:32 cruisecontrol drwxrwxr-x 2 root tomcat 4096 May 10 11:57 temp drwxrwxr-x 3 root tomcat 4096 Sep 15 22:53 work [root@fcvm tomcat5]# |
现在可以启动 Tomcat,并把它设置成在系统启动时重启。启动脚本目前会生成一些警告信息,但是可以忽略它们:
[root@fcvm ~]# service tomcat5 start Starting tomcat5: find: warning: you have specified the -mindepth opti on after a non-option argument -type, but options are not positional ( -mindepth affects tests specified before it as well as those specified after it). Please specify options before other arguments. find: warning: you have specified the -maxdepth option after a non-opt ion argument -type, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it). Pleas e specify options before other arguments. Using CATALINA_BASE: /usr/share/tomcat5 Using CATALINA_HOME: /usr/share/tomcat5 Using CATALINA_TMPDIR: /usr/share/tomcat5/temp Using JAVA_HOME: /usr/lib/jvm/java [ OK ] [root@fcvm ~]# chkconfig tomcat5 on [root@fcvm ~]# chkconfig --list tomcat5 tomcat5 0:off 1:off 2:on 3:on 4:on 5:on 6:off [root@fcvm ~]# |
现在应当能够用浏览器在 http://localhost:8080/cruisecontrol/ 上访问 CruiseControl Web 应用程序了。图 1 显示了将会看到的输出的示例:
图 1. CruiseControl Web 应用程序
在我总结之前,我要指出两个配置和运行自己的持续集成服务器所涉及的安全性问题。首先,我没有解决构建服务器的访问安全问题。您应当参考其他信息来源以确保您的系统安全,或者在提供适当保护的内部网络上运行它。
其次,对于要在持续集成服务器上构建的外部项目的开发人员,您要考虑对他们要信任到什么程度。项目的构建过程和单元测试可以访问服务器的资源,包括服务器连接的网络。自动构建过程意味着提交给远程版本控制仓库的变更会在没有人为干预的情况下,自动下载到构建服务器并在上面执行。这就把构建服务器置于提交给源树的 bug 和恶意代码的风险之下。您可能想限制在构建服务器上构建的外部项目,或者做些工作来保护系统和网络不受正在构建的项目的影响。
这篇文章介绍了运行 CruiseControl 的持续集成服务器的设置步骤。您安装了 CruiseControl 并学习了保持服务器一直运行需要做的工作,还了解了持续集成服务器的日常管理工作。而且还把配置的重要元素提取到更简单的 XML 文档中,包括版本控制和构建工具的选择以及用来构建每个项目的目标。
现在您学会了如何指定项目之间的依赖性。对于 Maven 项目来说指定比较容易,因为它们拥有一致的构建过程,生成的制品也有共享的仓库。Ant 则把这些机制留给每个项目,但是如果许多 Ant 项目都有公共的构建过程,那么可以用生成的 <filesystem>
元素对配置进行扩展,模拟这些项目之间的依赖性。CruiseControl 还有其他许多控制,可以用来增强持续集成过程。可以通过我介绍的 XSLT 样式表轻松地利用它们。
我快速介绍了运行 CruiseControl Web 应用程序需要的步骤,但是您可以提高自己安装的安全性和可靠性。更安全的配置可以使用 Apache 的 httpd
处理请求并把它们交给 Tomcat。让 daemontools
管理 Tomcat JVM(就像配置它来管理 CruiseControl 本身那样)可能更可靠。除此之外,还应当考虑构建服务器和构建服务器所在网络的安全需求,并尝试 Linux 提供的一些安全工具。
这篇文章的目的是通过采取持续集成方式,让开发过程更敏捷并提高软件的质量。创建构建服务器是具体而实用的一步,采用敏捷开发方法的更多实践还会得到进一步提高。我鼓励您阅读关于这些方法的更多内容(请参阅 参考资料)并用它们的想法来提高和调整开发过程。
文章来源于领测软件测试网 https://www.ltesting.net/