- 浏览: 119390 次
- 来自: ...
文章分类
最新评论
英文原文: Configuring CruiseControl the CruiseControl way
I'm an Infrastructure Specialist at ThoughtWorks. In my role I make sure that we are building our software so it can successfully be deployed to production. In this series of blog posts I hope to pass on my top ten tips for using CruiseControl Enterprise effectively. I'm writing these with the developers or systems administrators in mind: the people who most often manage CruiseControl. However, I hope that anybody who is interested in Continuous Integration will get something from these articles.
# 3: Configuring CruiseControl the CruiseControl way : 用 CruiseControl 的方式来配置 CruiseControl.
你刚刚开始使用CruiseControl, 你用一个版本控制系统来管理你的代码, 你把CruiseControl安装在办公室里一台空闲的机器上. 一切都很不错, 你的代码改变后它能够立刻给你反馈. 然后那台空闲机器上的硬盘完蛋了, 于是你的这台构建服务器只好继续着它以前空闲时门闩的角色.
"没问题", 你想: "所有的代码改变都在版本控制系统里, 我们能够重新生成任何我们需要的构件. 事实上, 我们需要的仅仅是那个配置文件 ...". 是的, 那个配置文件. 那个硬盘上的配置文件再也不能工作了. 这篇blog将简略叙述一下如何管理你的CruiseControl的配置而不必害怕失去它. 像许多工具一样, CruiseControl将会失去作用, 如果没有配置的话.
改善这种情形的第一步就是想办法让CruiseControl自己来应用配置的改变. 让我们开始吧. 除了那些来构建和测试你代码的<project>, 你还可以有一个专门的<project>来把配置改变应用到构建服务器. 我们一直这么做, 把配置文件放到正确的地方, 当它们改变的时候就使用CruiseControl的<bootstrapper> plugin来更新配置 :
<?xml version="1.0"?> <cruisecontrol> <project name="config"> <labelincrementer defaultLabel="${project.name}-1" separator="-"/> <listeners> <currentbuildstatuslistener file="/var/spool/cruisecontrol/logs/${project.name}/ currentbuildstatus.txt"/> </listeners> <bootstrappers> <svnbootstrapperlocalWorkingCopy="/etc/cruisecontrol"/>
</bootstrappers>
<modificationsetquietperiod="30">
<svnlocalWorkingCopy="/etc/cruisecontrol"/>
</modificationset> <schedule interval="60"> <ant antWorkingDir="/etc/cruisecontrol" antscript="/var/spool/cruisecontrol/tools/apache-ant-1.6.5 /bin/ant" uselogger="true"/> </schedule> <publishers> <artifactspublisher file="${project.name}/build.log" dest="logs/${project.name}"/> </publishers> </project> </cruisecontrol>
这将机械的更新配置, 直到世界末日. 它简单却相当有效, 现在我们不再依赖那个能够更改CruiseControl的家伙了. 突然之间他们就不需要代表团队中其他人来做些琐碎的更改了, 因为每个人都可以安全的改变配置. 如果有人确实check in了一个有问题的配置文件, 没关系, 一切都在版本控制系统中. 你可以revert这次改动, 可以找到是谁做的修改, 可以试着理解为什么他们想这么改.
这前进了一大步. 但是如果你check in了一个有问题的配置, 它还是会被应用到CruiseControl. 幸运的是CruiseControl有很好的判断力不去应用有问题的配置, 但这将使你失去重要的反馈. 对于这个问题, 你需要自己写一个简单的validator, 像下面这样:
package org.juliansimpson;
import java.io.File;
import net.sourceforge.cruisecontrol.CruiseControlException;
import net.sourceforge.cruisecontrol.config.XMLConfigManager;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
public class ConfigValidator extends Task {
public String configFile;
public void execute() throws BuildException {
try {
File file = new File(configFile);
new XMLConfigManager(file);
} catch (CruiseControlException e) {
throw new BuildException("Invalid CruiseControl Config");
}
}
public void setConfigFile(String config) {
configFile = config;
}
}
这个validator使用CruiseControl自己内部的一个类来校验配置. 最好是能有一个公开的接口来做这件事--可以是一个命令行选项或者一个"官方"的Ant task. 我请求过CruiseControl Enterprise Team在以后的release中考虑一下这个问题. 这种校验方式确实意味着你需要设置一下classpath, 以便让你的validator能够找到它引用的来自CruiseControl内部的类. 但是你会发现它确实能够保证目前的配置对于你正在使用的CruiseControl版本来说是有效的. 我倾向于以Ant task的方式来运行校验. 它非常简单, 并且每个人都能很容易的看到它做了什么. 下面是我把它放在一个简单的Ant脚本中:
<project name="cruisevalidator" default="publish" > <import file="build-library.xml"/> <target name="validated-config" depends="cruise-validator.jar"> <taskdef name="validate" classname="org.juliansimpson.ConfigValidator" classpathref="main"/> <echo message="validating ${config}" /> <validate configFile="${config}" /> </target> <target name="publish" depends="validated-config"> <echo level="info" message="copying CruiseControl config to server" /> <copy file="${config}" todir="${cruisecontrol.dir}" failonerror="true" description="Copy configuration to CruiseControl server" /> <echo level="info" message="forcing a reload of config on server" /> <get src="http://localhost:8000/invoke?operation=reloadConfigFile&objectname=CruiseControl+Manager%3Aid%3Dunique" dest="${build.dir}/reload.html" /> </target> </project>
它们合在一起像下面这样工作: CruiseControl的BootsStrapper获取最新的配置文件, 但是放在不同于CruiseControl安装目录的目录中. 你依然还不清楚它是否是一个有效的配置文件. 然后"validated-config" target会调用ConfigValidator 这个Ant task.这将调用到CruiseControl中足够的逻辑来确保配置是合法的,并且配置文件中涉及到的一些目录都存在.如果通过了这一步,那么 "publish"target就会把配置拷贝到CruiseControlserver自身的目录中覆盖原来的文件.最后还是 "publish"target会发一个简单的Http请求到JMX接口,来强制CruiseControl来重新加载一下配置.这将确保新配置会立即被 加载,这样team就会知道新配置是合法的.谢谢我的同事Tim Brown的这个非凡的主意.
我不得不承认有时我会不小心弄坏XML配置文件. 这种方式对我来说工作的尤其好, 因为我有校验的保护网. 我对我的邮件服务器和web服务器做了相似的事情, 希望很快能有机会写一下它们. 文中validator的源代码和构建脚本可以在我的网站上下载: http://www.juliansimpson.org/.
<echo level="info" message="forcing a reload of config on server" file="${config}" todir="${cruisecontrol.dir}" failonerror="true" description="Copy configuration to CruiseControl server" name="publish" depends="validated-config" configfile="${config}" classname="org.juliansimpson.ConfigValidator" classpathref="http://studios.thoughtworks.com/2007/10/30/main" default="publish"><br> ©Julian Simpson 2007. All rights reserved. </echo>
我想这个实践的核心是:
1, 将CruiseControl的配置文件check in到版本控制系统中, 以解决意外损坏的问题
2, 使用专门的"project"来自动更新配置, 以解决每次需要有人专门登录到build server上去更新的瓶颈问题.
3, 复用但不依赖于CruiseControl对配置文件的validation, 以同时获得 "阻止有问题的配置文件被应用到build server的能力" 和 "迅速获知有人check in了有问题的配置的能力"
发表评论
-
The Object Primer
2004-12-11 11:21 5951,书名 被翻译成“ ... -
错误处理规范
2004-12-11 16:47 760错误处理规范 〇、概念澄清 概念 解释 错误 ... -
Java,误解为何如此之深
2005-08-24 13:50 596前几天被电话面试,问J ... -
Java:画蛇添足的编码规范
2005-09-02 13:13 624前几天公司培训编码规范: 第n条: ... -
synchronized : 规则, 推论与实践
2007-07-23 22:32 47314.3.Synchronization. Rule ... -
交互设计: 股市帮凶
2008-05-04 21:30 649同事 Y 在线操作股票时, 把"买入"点成 ... -
交互设计: 火车上的厕所
2008-05-26 17:17 614有人在动车组的厕所前等了很久, 直到乘务员路过说厕所是被锁住了 ... -
设计原则与模式: 案例介绍--CppUnit
2008-06-01 20:15 635设计原则与模式: 案例介绍--CppUnit CppUnit ... -
工作流:形参,实参,相关数据
2004-12-11 11:40 678关于形参,实参,相关数据 一、形参(FormalParame ... -
工作流:第一次发版,过程总结
2004-12-11 11:42 714交流 即时讨论:小组成员咫尺之遥,有问题立即提出并解决 ... -
工作流:第一次发版,设计总结
2004-12-11 11:43 614整体 面向接口:消息系统,持久系统等,其实现都是可替换 ... -
Beyond Workflow : An Introduction to Vitria BusinessWare
2005-09-26 10:13 807一、简介 Busines ... -
Vitria BusinessWare: 存储与访问安全
2006-03-26 15:45 755事实上,BusinessWare使用LDAP做为存储机制和 ... -
Vitria BusinessWare: 平台与软件总线
2006-04-01 12:59 853经过一段时间的使用 ... -
Vitria BusinessWare: Web Services
2006-04-01 14:30 744BusinessWare的Web Services ... -
Web Services:自洽,编码,交换模型
2006-04-01 16:02 6891, 自洽 以前曾经写过: 目前WebServi ... -
Web Services:WSDL 1.1 规范中的几个错误
2006-04-01 16:40 730读完了WSDL 1.1的规范,令人惊讶的是发现似乎例子中有几个 ... -
C++/CLI:被忽视的集成技术
2006-05-17 20:02 760十几行代码,就使一个重要的旧系统组件,完全融入了基于.Ne ... -
AJP/JK:异构Web平台的集成技术
2006-05-25 21:44 713Tomcat Connector 可以将Tomcat ... -
Vitria BusinessWare: 事件与端口
2006-05-27 17:24 677Event BusinessWare是一个事件驱动的系统 ...
相关推荐
- **CruiseControl.doc**:可能是一份CruiseControl的入门教程或者详细使用指南,涵盖安装配置、基本概念、常用命令和最佳实践等内容。 - **CruiseControl2.doc**:可能是关于CruiseControl的进阶使用,可能涉及...
3. **启动服务**:使用 Windows 系统时,可以通过运行 `cruisecontrol.bat` 文件来启动服务;对于 Linux 或 macOS 用户,则需运行 `cruisecontrol.sh` 文件。 4. **访问 Web 控制台**:通过浏览器访问 ...
CruiseControl是一款持续集成工具,它能够自动化地构建、测试和部署软件项目,极大地提高了开发效率和产品质量。在本文中,我们将深入探讨如何配置CruiseControl以实现定时运行,确保项目始终保持最新状态。 首先,...
6. **向CruiseControl中加入新项目**:"CruiseControl step by step(3)"部分可能详细介绍了如何添加新的项目到CruiseControl服务器,包括项目配置文件的修改和项目构建规则的设定。 7. **了解CruiseControl的配置...
3. **启动**:使用`cruise control start`命令启动服务,`cruise control stop`则停止服务。 ### 四、CruiseControl.rb的工作流程 1. **检查源码仓库**:CruiseControl.rb定期检查源码仓库是否有新的提交。 2. **...
CruiseControl是一款持续集成工具,它能够自动化地执行软件项目的构建、测试和部署流程,以确保代码的质量和项目的稳定性。本篇文章将详细介绍CruiseControl的基本概念、安装过程、配置方法以及一个简单的使用示例。...
CruiseControl 是一个开源的持续集成工具,用于自动化软件构建、测试和部署的过程。它通过监控版本控制系统中的变更,自动触发构建任务,及时发现并解决代码集成中的问题,从而提高开发团队的效率和软件质量。本...
**持续集成实践之CruiseControl** 在软件开发领域,持续集成(Continuous Integration,简称CI)是一种重要的实践,它强调开发者频繁地将代码更改合并到主分支,以尽早发现并解决问题。CruiseControl是一款开源的...
标题与描述概述的知识点主要涉及了使用CruiseControl与Maven2进行持续集成的配置流程。这是一项在软件开发过程中非常关键的技术实践,它能够自动检测代码库中的更新,并自动执行构建、测试以及部署等任务,从而确保...
主题:持续集成及CruiseControl技术交流 在提升软件质量、降低研发风险、拒绝浪费方面,处于敏捷实践领域的持续集成(Continuous Integration,CI)起到重要作用。持续集成能够解决研发工作中的80%任务(日常),...
3. **启动CruiseControl**:运行CruiseControl服务,它会根据配置文件定期检查源代码并触发构建。 4. **监控和调整**:通过CruiseControl提供的Web界面,你可以查看构建状态、日志和历史记录,根据实际情况调整配置...
本教程将详细讲解CruiseControl的学习与实践。 **第一章 CruiseControl实践** 1.1 CruiseControl架构 CruiseControl的核心是一个服务器,它负责监听源代码仓库的变更,并在检测到变更时触发构建过程。这个过程包括...
3.CruiseControl的配置 当CruiseControl服务器启动时,会自动检测配置信息中的任务信息,并对其进行校验和初始化,之后所有的工作,都是依据该配置信息进行的。CruiseControl的配置使用了其安装目录下的config.xml...
CruiseControl是CI服务器的老者,诞生已是多年,在许多方面,CruiseControl服务器已经成为持续集成实践的同义词。而现在,CruiseControl已发展成为一个家族式系统,包括CruiseControl.java、CruiseControl.net、...
cruisecontrol.war 文件,你可以直接将这个文件 COPY 到你的%TOMCAT_HOME%\webapps 目录下,不 过这种方式通常都会出错,前 面我们讲过CC的WEB组件要访问我们的项目build 的状态文件,而下载的 CC2.2 里面自带的 ...
例如`<filterTrigger startTime="8:30" endTime="15:55">`表示在每天上午8:30至下午3:55之间不执行持续集成。 - **Interval Trigger**: 定义连续两次执行持续集成之间的固定间隔。 - **Schedule Trigger**: 设置每天...
CruiseControl.NET 是 .NET 平台下的持续集成工具,CruiseControl (Java) 的 .NET 移植版本。CruiseControl是一个针对持续构建程序(项目持续集成)的框架,它包括一个email通知的插件,Ant和各种各样的CVS工具。Cruise...