- 浏览: 121450 次
- 来自: ...
-
文章分类
最新评论
CruiseControl Enterprise 最佳实践 (6) :Scaling up
©Copyright 2008 Julian Simpson. All rights reserved.
英文原文: Scaling up
I was 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.
# 6: Scaling up
第 一件要做的事就是确保你可以同时构建你的多个项目. CruiseControl使用Java线程来管理构建和项目. 每个项目都有自己的项目线程. 而至少有一个构建线程来真正的运行一次构建. 实际上有一个构建队列, 来调度从项目线程到发到构建线程的请求. 你要给CruiseControl足够的构建线程来运行: 缺省情况下只有一个构建线程. 它的影响就是如果你配置了 5 个项目, 你也只能一次构建一个. 这也可以接受, 如果你只有一台很弱的构建服务器, 或者项目之间不能和平共处.
另一方面, 如果你有强大的计算能力可以使用, 你就可以从额外的构建线程中得到提速. 正确的线程数量设置会随着时间而变化; 不要不情愿去做性能管理来找到你的服务器的最优的设置.
<cruisecontrol>
<system>
<configuration>
<threads count="2" />
</configuration>
</system>
<!-- rest of config file suppressed -->
</cruisecontrol>
Jeffrey Frederick 则明智的指出设置多于项目个数的构建线程数是没有意义的.
在 调优你的持续集成服务时, 还有大量的其它因素可以考虑: 你的版本控制系统的速度, 你在哪里存储你的构建产物, 日志, 等等. 今天我要提到的一个因素是硬盘带宽. 编译软件是一个很耗硬盘的过程. 即使构建已经完成了编译Java代码和打包jar包等操作, CruiseControl还得写日志文件. 所有这些事情很容易就会让单个硬盘满负荷运转. 理想情况下你想确保你的机器能够一次构建多个项目.
在 我很早期的一个ThoughtWorks项目中, 我们的团队运行了两个CruiseControl服务器, 显然是因为最初的那个Solaris服务器太慢了. 对我来说这看起来不对劲. 于是我深入的看了一下. 依靠我的系统管理员背景, 我发现了某个硬盘100%的忙于运行操作系统, CruiseControl和构建. 我把工作负载分布到系统中的四个硬盘上, 然后那台机器就能管理多得多的项目了.
在我后续的项目中, 这个模式不断的重复. 以我的经验, 没有多少CI服务器是因为处理器过载而受到限制. 不幸的是, 一旦系统启动并开始运行, 矫正磁盘问题通常会很痛苦. 在调优和人们开始抱怨缓慢的构建之前, 定购大量的快速的硬盘驱动器并祝自己好运.
实 现这个模式的方法是使用CruiseControl的配置文件. <log>元素用来告诉CruiseControl把日志文件写到哪. 缺省情况下它是CruiseControl安装目录下的一个子目录. 如果你修改了<log>元素的"dir"属性, 你就能够确保日志文件可以写到没有运行CruiseControl的硬盘上. 如果你使用 Ant 来构建你的代码, 你可以使用配置文件中<ant>元素的 "antWorkingDir" 属性来保证你的项目在另外一个硬盘上构建.
我 无法为此给出一个很好的例子, 每个CruiseControl的实例之间太不一样了. Buildx是一个使多个安装更一致的尝试. 如果你看一下各个部分在硬盘上的布局方式, 你就会发现CruiseControl的安装在/usr/share/cruisecontrol, 但是projects和logs安装在/var/spool/cruisecontrol: 我们这么做的原因是这样的话你就能 mount /var 目录到另外一块硬盘, 如果系统开始变得繁忙. 如果你想知道更多的话随时告诉我.
另一方面, 如果你有强大的计算能力可以使用, 你就可以从额外的构建线程中得到提速. 正确的线程数量设置会随着时间而变化; 不要不情愿去做性能管理来找到你的服务器的最优的设置.
<cruisecontrol>
<system>
<configuration>
<threads count="2" />
</configuration>
</system>
<!-- rest of config file suppressed -->
</cruisecontrol>
Jeffrey Frederick 则明智的指出设置多于项目个数的构建线程数是没有意义的.
在 调优你的持续集成服务时, 还有大量的其它因素可以考虑: 你的版本控制系统的速度, 你在哪里存储你的构建产物, 日志, 等等. 今天我要提到的一个因素是硬盘带宽. 编译软件是一个很耗硬盘的过程. 即使构建已经完成了编译Java代码和打包jar包等操作, CruiseControl还得写日志文件. 所有这些事情很容易就会让单个硬盘满负荷运转. 理想情况下你想确保你的机器能够一次构建多个项目.
在 我很早期的一个ThoughtWorks项目中, 我们的团队运行了两个CruiseControl服务器, 显然是因为最初的那个Solaris服务器太慢了. 对我来说这看起来不对劲. 于是我深入的看了一下. 依靠我的系统管理员背景, 我发现了某个硬盘100%的忙于运行操作系统, CruiseControl和构建. 我把工作负载分布到系统中的四个硬盘上, 然后那台机器就能管理多得多的项目了.
在我后续的项目中, 这个模式不断的重复. 以我的经验, 没有多少CI服务器是因为处理器过载而受到限制. 不幸的是, 一旦系统启动并开始运行, 矫正磁盘问题通常会很痛苦. 在调优和人们开始抱怨缓慢的构建之前, 定购大量的快速的硬盘驱动器并祝自己好运.
实 现这个模式的方法是使用CruiseControl的配置文件. <log>元素用来告诉CruiseControl把日志文件写到哪. 缺省情况下它是CruiseControl安装目录下的一个子目录. 如果你修改了<log>元素的"dir"属性, 你就能够确保日志文件可以写到没有运行CruiseControl的硬盘上. 如果你使用 Ant 来构建你的代码, 你可以使用配置文件中<ant>元素的 "antWorkingDir" 属性来保证你的项目在另外一个硬盘上构建.
我 无法为此给出一个很好的例子, 每个CruiseControl的实例之间太不一样了. Buildx是一个使多个安装更一致的尝试. 如果你看一下各个部分在硬盘上的布局方式, 你就会发现CruiseControl的安装在/usr/share/cruisecontrol, 但是projects和logs安装在/var/spool/cruisecontrol: 我们这么做的原因是这样的话你就能 mount /var 目录到另外一块硬盘, 如果系统开始变得繁忙. 如果你想知道更多的话随时告诉我.
发表评论
-
The Object Primer
2004-12-11 11:21 6081,书名 被翻译成“ ... -
错误处理规范
2004-12-11 16:47 766错误处理规范 〇、概念澄清 概念 解释 错误 ... -
Java,误解为何如此之深
2005-08-24 13:50 597前几天被电话面试,问J ... -
Java:画蛇添足的编码规范
2005-09-02 13:13 645前几天公司培训编码规范: 第n条: ... -
synchronized : 规则, 推论与实践
2007-07-23 22:32 48714.3.Synchronization. Rule ... -
交互设计: 股市帮凶
2008-05-04 21:30 659同事 Y 在线操作股票时, 把"买入"点成 ... -
交互设计: 火车上的厕所
2008-05-26 17:17 625有人在动车组的厕所前等了很久, 直到乘务员路过说厕所是被锁住了 ... -
设计原则与模式: 案例介绍--CppUnit
2008-06-01 20:15 657设计原则与模式: 案例介绍--CppUnit CppUnit ... -
工作流:形参,实参,相关数据
2004-12-11 11:40 686关于形参,实参,相关数据 一、形参(FormalParame ... -
工作流:第一次发版,过程总结
2004-12-11 11:42 718交流 即时讨论:小组成员咫尺之遥,有问题立即提出并解决 ... -
工作流:第一次发版,设计总结
2004-12-11 11:43 633整体 面向接口:消息系统,持久系统等,其实现都是可替换 ... -
Beyond Workflow : An Introduction to Vitria BusinessWare
2005-09-26 10:13 811一、简介 Busines ... -
Vitria BusinessWare: 存储与访问安全
2006-03-26 15:45 762事实上,BusinessWare使用LDAP做为存储机制和 ... -
Vitria BusinessWare: 平台与软件总线
2006-04-01 12:59 869经过一段时间的使用 ... -
Vitria BusinessWare: Web Services
2006-04-01 14:30 776BusinessWare的Web Services ... -
Web Services:自洽,编码,交换模型
2006-04-01 16:02 7051, 自洽 以前曾经写过: 目前WebServi ... -
Web Services:WSDL 1.1 规范中的几个错误
2006-04-01 16:40 746读完了WSDL 1.1的规范,令人惊讶的是发现似乎例子中有几个 ... -
C++/CLI:被忽视的集成技术
2006-05-17 20:02 791十几行代码,就使一个重要的旧系统组件,完全融入了基于.Ne ... -
AJP/JK:异构Web平台的集成技术
2006-05-25 21:44 729Tomcat Connector 可以将Tomcat ... -
Vitria BusinessWare: 事件与端口
2006-05-27 17:24 703Event BusinessWare是一个事件驱动的系统 ...
相关推荐
- **CruiseControl.doc**:可能是一份CruiseControl的入门教程或者详细使用指南,涵盖安装配置、基本概念、常用命令和最佳实践等内容。 - **CruiseControl2.doc**:可能是关于CruiseControl的进阶使用,可能涉及...
6. **向CruiseControl中加入新项目**:"CruiseControl step by step(3)"部分可能详细介绍了如何添加新的项目到CruiseControl服务器,包括项目配置文件的修改和项目构建规则的设定。 7. **了解CruiseControl的配置...
6. **检查配置文件**:通常情况下,`config.xml` 和 `dashboard-config.xml` 文件包含了 CruiseControl 的主要配置信息。这些文件位于安装目录下的 `etc` 目录内。 #### 四、关键配置说明 - **Ant 支持**:Cruise...
CruiseControl是一款持续集成工具,它能够自动化地执行软件项目的构建、测试和部署流程,以确保代码的质量和项目的稳定性。本篇文章将详细介绍CruiseControl的基本概念、安装过程、配置方法以及一个简单的使用示例。...
CruiseControl是一款持续集成工具,它能够自动化地构建、测试和部署软件项目,极大地提高了开发效率和产品质量。在本文中,我们将深入探讨如何配置CruiseControl以实现定时运行,确保项目始终保持最新状态。 首先,...
**持续集成实践之CruiseControl** 在软件开发领域,持续集成(Continuous Integration,简称CI)是一种重要的实践,它强调开发者频繁地将代码更改合并到主分支,以尽早发现并解决问题。CruiseControl是一款开源的...
**持续集成之CruiseControl.rb** CruiseControl.rb是一款开源的持续集成工具,主要用于自动化构建、测试和部署软件项目。它是由ThoughtWorks公司开发的,是CruiseControl.NET的Ruby版本,因此在Ruby社区中被广泛...
CruiseControl 是一个开源的持续集成工具,用于自动化软件构建、测试和部署的过程。它通过监控版本控制系统中的变更,自动触发构建任务,及时发现并解决代码集成中的问题,从而提高开发团队的效率和软件质量。本...
CruiseControl是一款持续集成工具,它能够自动化地构建、测试和部署软件项目,极大地提高了开发效率和产品质量。本文将深入探讨CruiseControl的核心概念、配置方法以及如何在实际项目中运用。 CruiseControl的主要...
标题与描述概述的知识点主要涉及了使用CruiseControl与Maven2进行持续集成的配置流程。这是一项在软件开发过程中非常关键的技术实践,它能够自动检测代码库中的更新,并自动执行构建、测试以及部署等任务,从而确保...
主题:持续集成及CruiseControl技术交流 在提升软件质量、降低研发风险、拒绝浪费方面,处于敏捷实践领域的持续集成(Continuous Integration,CI)起到重要作用。持续集成能够解决研发工作中的80%任务(日常),...
本教程将详细讲解CruiseControl的学习与实践。 **第一章 CruiseControl实践** 1.1 CruiseControl架构 CruiseControl的核心是一个服务器,它负责监听源代码仓库的变更,并在检测到变更时触发构建过程。这个过程包括...
CruiseControl是CI服务器的老者,诞生已是多年,在许多方面,CruiseControl服务器已经成为持续集成实践的同义词。而现在,CruiseControl已发展成为一个家族式系统,包括CruiseControl.java、CruiseControl.net、...
"利用CruiseControl软件进行持续集成" 在软件开发过程中,持续集成是一个非常重要的步骤,它可以帮助开发团队更好地合作和跟踪项目的进度。CruiseControl是一种流行的持续集成工具,能够自动化地构建、测试和部署...
CruiseControl.NET + msbuild的安装与配置方法 CruiseControl.NET是一款自动化的持续集成工具,可以与msbuild集成,以实现项目的自动编译和监视。本文将详细介绍CruiseControl.NET + msbuild的安装与配置方法。 ...
Cruise与Simulink联合仿真研究:插电式混合动力模型及策略应用,Cruise与Simulink联合仿真研究:插电式混合动力模型及其策略应用,Cruise与simulink联合仿真,插电式混合动力模型, Cruise与simulink联合仿真,插电式...
cruisecontrol.war 文件,你可以直接将这个文件 COPY 到你的%TOMCAT_HOME%\webapps 目录下,不 过这种方式通常都会出错,前 面我们讲过CC的WEB组件要访问我们的项目build 的状态文件,而下载的 CC2.2 里面自带的 ...
CRUISE M热管理视频教程:无模型,文档解说,轻松学习热管理知识,CRUISE M热管理视频教程:无模型,文档解说,轻松学习了解,录的CRUISE M热管理视频,有文档解说,没有模型,可用来学习了解。 ,录的; CRUISE; M热...
CruiseControl.NET 是 .NET 平台下的持续集成工具,CruiseControl (Java) 的 .NET 移植版本。CruiseControl是一个针对持续构建程序(项目持续集成)的框架,它包括一个email通知的插件,Ant和各种各样的CVS工具。Cruise...