- 浏览: 119346 次
- 来自: ...
文章分类
最新评论
CruiseControl Enterprise 最佳实践 (1) : Publish with a Publisher
©Copyright 2007 Julian Simpson. All rights reserved.
英文原文: CruiseControl Enterprise: 10 Best Practices
英文原文: CruiseControl Enterprise: 10 Best Practices
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.
# 1: Publish with a Publisher : 使用 Publisher 来发布, 而不是在构建过程中发布
许多项目都会用到"发布"的概念: 把构建产物放到指定地方, 或者把测试结果发送给最终用户. ArtifactsPublisher 就是一种很常用的方式, 用来把文件发布到CruiseControl自己的时间戳目录形式的仓库中, 这样构建日志, 构建产物和测试结果等就可以通过新的CruiseControl Dashboard或者传统的CruiseControl Reporting应用展现出来.
ArtifactsPublisher不过是整个 Publisher 家族中的一员, 而我的最爱是 AntPubliisher. 如果你的Ant构建以发布构建产物到仓库中或者给你的版本控制系统打Tag来结束, 那么或许应该用另外的方式来做这些事情. 考虑下面的CruiseControl调用的Ant脚本例子:
<project>
<target name="dist" description="build everything">
</target>
<target name="clean" description="delete all build artifacts">
</target>
<target name="test" description="run unit tests">
</target>
<target name="publish" description="publish to repository">
</target>
<target name="cruise" depends="clean,dist,test,publish"/>
</project>
构建的最后一步是通过 "publish" target 发布通过了单元测试的工作产物到某个仓库或类似的地方. 这对于CruiseControl来说不错, 很好, 但是, "发布"的概念并不真正适合在开发者的构建过程中使用. 如果我们能够断开"发布"和构建过程的其它部分之间的联系,开发者就能够和CruiseControl使用一模 一样的构建过程. 要想这样做, 只需要让CruiseControl来调用你开发过程中使用的构建脚本, 而把"publish"作为一个独立的Ant target:
<project>
<target name="dist" description="build everything">
</target>
<target name="clean" description="delete all build artifacts">
</target>
<target name="test" description="run unit tests">
</target>
<target name="dev" depends="clean,dist,test"/>
<target name="publish" description="publish to repository" if="logfile">
</target>
</project>
'publish' target 中的 'if' 属性用来保证这个target只会被 publisher 或某个特定的人来运行. 接下来, 只需改动一下CruiseControl的配置:
<!-- some config removed from this example -->
<schedule interval="60">
<ant antWorkingDir="${checkout.dir}" buildfile="build.xml" target="dev"/>
</schedule>
<publishers>
<onsuccess>
<antpublisher antWorkingDir="${checkout.dir}" buildfile="build.xml" target="publish"/>
<onsuccess>
</publishers>
OK, 这就做完了. 一旦你应用了新的配置, CruiseControl就会运行和开发者一模一样的Ant构建. 这意味着构建失败时并不是因为 "CruiseControl" 做了什么神秘的事. 这还有助于通过更快的报告成功或失败来缩短构建的反馈周期. 当开发者在庆祝或郁闷于构建的成功或失败时, AntPublisher 在同一时间继续做着把构建产物发布到网络上的工作. 我还用它来为codebase打tag, 如果构建成功的话--这件事也是"持续集成"的一部分.
Publishers 能够被直接用在配置文件的<publishers>元素中, 这样每次构建结束后无论成功失败都会运行. 也可以包在<onsuccess>或<onfailure>中有条件的运行.
Publishers 有一个堂兄妹表姐弟叫 Bootstrappers, 我另外找时间说说它.
-----------------------------
我想这个实践的好处就是
1. 开发者每次在自己机器上构建时不需要发布, 省时间
2. CruiseControl使用跟开发者相同的构建脚本, 减少了开发者构建成功而CruiseControl构建失败的概率, 省调试时间
3. CruiseControl运行Publisher时开发者可以继续工作了, 提高了并发性, 还是省时间
# 1: Publish with a Publisher : 使用 Publisher 来发布, 而不是在构建过程中发布
许多项目都会用到"发布"的概念: 把构建产物放到指定地方, 或者把测试结果发送给最终用户. ArtifactsPublisher 就是一种很常用的方式, 用来把文件发布到CruiseControl自己的时间戳目录形式的仓库中, 这样构建日志, 构建产物和测试结果等就可以通过新的CruiseControl Dashboard或者传统的CruiseControl Reporting应用展现出来.
ArtifactsPublisher不过是整个 Publisher 家族中的一员, 而我的最爱是 AntPubliisher. 如果你的Ant构建以发布构建产物到仓库中或者给你的版本控制系统打Tag来结束, 那么或许应该用另外的方式来做这些事情. 考虑下面的CruiseControl调用的Ant脚本例子:
<project>
<target name="dist" description="build everything">
</target>
<target name="clean" description="delete all build artifacts">
</target>
<target name="test" description="run unit tests">
</target>
<target name="publish" description="publish to repository">
</target>
<target name="cruise" depends="clean,dist,test,publish"/>
</project>
构建的最后一步是通过 "publish" target 发布通过了单元测试的工作产物到某个仓库或类似的地方. 这对于CruiseControl来说不错, 很好, 但是, "发布"的概念并不真正适合在开发者的构建过程中使用. 如果我们能够断开"发布"和构建过程的其它部分之间的联系,开发者就能够和CruiseControl使用一模 一样的构建过程. 要想这样做, 只需要让CruiseControl来调用你开发过程中使用的构建脚本, 而把"publish"作为一个独立的Ant target:
<project>
<target name="dist" description="build everything">
</target>
<target name="clean" description="delete all build artifacts">
</target>
<target name="test" description="run unit tests">
</target>
<target name="dev" depends="clean,dist,test"/>
<target name="publish" description="publish to repository" if="logfile">
</target>
</project>
'publish' target 中的 'if' 属性用来保证这个target只会被 publisher 或某个特定的人来运行. 接下来, 只需改动一下CruiseControl的配置:
<!-- some config removed from this example -->
<schedule interval="60">
<ant antWorkingDir="${checkout.dir}" buildfile="build.xml" target="dev"/>
</schedule>
<publishers>
<onsuccess>
<antpublisher antWorkingDir="${checkout.dir}" buildfile="build.xml" target="publish"/>
<onsuccess>
</publishers>
OK, 这就做完了. 一旦你应用了新的配置, CruiseControl就会运行和开发者一模一样的Ant构建. 这意味着构建失败时并不是因为 "CruiseControl" 做了什么神秘的事. 这还有助于通过更快的报告成功或失败来缩短构建的反馈周期. 当开发者在庆祝或郁闷于构建的成功或失败时, AntPublisher 在同一时间继续做着把构建产物发布到网络上的工作. 我还用它来为codebase打tag, 如果构建成功的话--这件事也是"持续集成"的一部分.
Publishers 能够被直接用在配置文件的<publishers>元素中, 这样每次构建结束后无论成功失败都会运行. 也可以包在<onsuccess>或<onfailure>中有条件的运行.
Publishers 有一个堂兄妹表姐弟叫 Bootstrappers, 我另外找时间说说它.
-----------------------------
我想这个实践的好处就是
1. 开发者每次在自己机器上构建时不需要发布, 省时间
2. CruiseControl使用跟开发者相同的构建脚本, 减少了开发者构建成功而CruiseControl构建失败的概率, 省调试时间
3. CruiseControl运行Publisher时开发者可以继续工作了, 提高了并发性, 还是省时间
发表评论
-
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 623前几天公司培训编码规范: 第n条: ... -
synchronized : 规则, 推论与实践
2007-07-23 22:32 47214.3.Synchronization. Rule ... -
交互设计: 股市帮凶
2008-05-04 21:30 648同事 Y 在线操作股票时, 把"买入"点成 ... -
交互设计: 火车上的厕所
2008-05-26 17:17 613有人在动车组的厕所前等了很久, 直到乘务员路过说厕所是被锁住了 ... -
设计原则与模式: 案例介绍--CppUnit
2008-06-01 20:15 634设计原则与模式: 案例介绍--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 754事实上,BusinessWare使用LDAP做为存储机制和 ... -
Vitria BusinessWare: 平台与软件总线
2006-04-01 12:59 852经过一段时间的使用 ... -
Vitria BusinessWare: Web Services
2006-04-01 14:30 743BusinessWare的Web Services ... -
Web Services:自洽,编码,交换模型
2006-04-01 16:02 6881, 自洽 以前曾经写过: 目前WebServi ... -
Web Services:WSDL 1.1 规范中的几个错误
2006-04-01 16:40 729读完了WSDL 1.1的规范,令人惊讶的是发现似乎例子中有几个 ... -
C++/CLI:被忽视的集成技术
2006-05-17 20:02 759十几行代码,就使一个重要的旧系统组件,完全融入了基于.Ne ... -
AJP/JK:异构Web平台的集成技术
2006-05-25 21:44 712Tomcat Connector 可以将Tomcat ... -
Vitria BusinessWare: 事件与端口
2006-05-27 17:24 676Event BusinessWare是一个事件驱动的系统 ...
相关推荐
- **CruiseControl.doc**:可能是一份CruiseControl的入门教程或者详细使用指南,涵盖安装配置、基本概念、常用命令和最佳实践等内容。 - **CruiseControl2.doc**:可能是关于CruiseControl的进阶使用,可能涉及...
1. **Source Control**:CruiseControl.rb支持多种版本控制系统,如Git、Subversion(SVN)、Mercurial等,用于获取最新的代码变更。 2. **Builder**:构建器负责执行编译、打包等任务。它可以是Rake、Ant或其他...
1. **安装 Java SDK**:CruiseControl 需要 Java 运行环境,因此首先需要安装 Java SDK 并设置 `JAVA_HOME` 环境变量。 2. **下载 CruiseControl**:选择合适的版本进行下载,例如 2.8.3 版本可从 ...
10. **Driving On CruiseControl - Part 1**:这部分可能是系列教程的开篇,概述了CruiseControl在持续集成中的核心作用,以及如何驾驶CruiseControl以优化开发流程。 这些资料集合为学习和掌握CruiseControl提供了...
CruiseControl是一款持续集成工具,它能够自动化地构建、测试和部署软件项目,极大地提高了开发效率和产品质量。在本文中,我们将深入探讨如何配置CruiseControl以实现定时运行,确保项目始终保持最新状态。 首先,...
**持续集成实践之CruiseControl** 在软件开发领域,持续集成(Continuous Integration,简称CI)是一种重要的实践,它强调开发者频繁地将代码更改合并到主分支,以尽早发现并解决问题。CruiseControl是一款开源的...
CruiseControl是一款持续集成工具,它能够自动化地执行软件项目的构建、测试和部署流程,以确保代码的质量和项目的稳定性。本篇文章将详细介绍CruiseControl的基本概念、安装过程、配置方法以及一个简单的使用示例。...
CruiseControl 是一个开源的持续集成工具,用于自动化软件构建、测试和部署的过程。它通过监控版本控制系统中的变更,自动触发构建任务,及时发现并解决代码集成中的问题,从而提高开发团队的效率和软件质量。本...
标题与描述概述的知识点主要涉及了使用CruiseControl与Maven2进行持续集成的配置流程。这是一项在软件开发过程中非常关键的技术实践,它能够自动检测代码库中的更新,并自动执行构建、测试以及部署等任务,从而确保...
1. **CruiseControl.xml**:这是CruiseControl的核心配置文件,定义了构建项目的源代码位置、构建计划、触发条件、构建步骤、通知设置等。你需要根据项目需求详细编写此文件。 2. **构建计划**:在CruiseControl....
1.认识CruiseControl CruiseControl是一种持续集成框架,提供了邮件通知、ANT和各种源码控制工具的插件,并提供了Web接口,用于查看当前和以前的build结果。CruiseControl系统的架构图中,我们可以看到,Cruise...
主题:持续集成及CruiseControl技术交流 在提升软件质量、降低研发风险、拒绝浪费方面,处于敏捷实践领域的持续集成(Continuous Integration,CI)起到重要作用。持续集成能够解决研发工作中的80%任务(日常),...
本教程将详细讲解CruiseControl的学习与实践。 **第一章 CruiseControl实践** 1.1 CruiseControl架构 CruiseControl的核心是一个服务器,它负责监听源代码仓库的变更,并在检测到变更时触发构建过程。这个过程包括...
CruiseControl是CI服务器的老者,诞生已是多年,在许多方面,CruiseControl服务器已经成为持续集成实践的同义词。而现在,CruiseControl已发展成为一个家族式系统,包括CruiseControl.java、CruiseControl.net、...
cruisecontrol.war 文件,你可以直接将这个文件 COPY 到你的%TOMCAT_HOME%\webapps 目录下,不 过这种方式通常都会出错,前 面我们讲过CC的WEB组件要访问我们的项目build 的状态文件,而下载的 CC2.2 里面自带的 ...
CruiseControl.NET 是 .NET 平台下的持续集成工具,CruiseControl (Java) 的 .NET 移植版本。CruiseControl是一个针对持续构建程序(项目持续集成)的框架,它包括一个email通知的插件,Ant和各种各样的CVS工具。Cruise...
### CruiseControl.net 配置详解 #### 一、CruiseControl.net简介 CruiseControl.net是一种流行的持续集成(CI)工具,它可以帮助软件团队自动构建、测试和部署代码,从而提高开发效率和软件质量。本篇文章将围绕...
### 自动化集成CruiseControl.NET、NAnt与NUnit:构建持续集成环境 #### 概述 在软件开发过程中,回归测试是一个重要的但经常被忽视的环节。回归测试是指在对已有代码进行修改后重新运行之前的测试用例,以确保...