目录
原著:Luntbuild Team, 翻译:Melthaw Zhang [RedSaga]
Luntbuild是一种基于流行的构建工具-- Apache Ant-- 的自动化构建和管理工具。 通过Luntbuild,可以很容易做到日构建和持续集成。如果您对日构建和持续集成并不熟悉, 请参考一下关于日构建和持续集成的文章。
首先,Luntbuild团队感谢您选择Luntbuild作为您持续集成的工具,同时,我们注意到,现在市场上还有很多 现成的持续集成的工具,到底该选择哪一种,需要您自己做出判断。下面这篇文章对现有的持续集成工具 进行了很好的横向比较,也许这篇文章对您的抉择有所帮助: Continuous Integration Server Feature Matrix.
您可以通过Luntbuild示例 来了解Luntbuild的功能。也可以通过阅读FAQ 进一步学习Luntbuild。
在Luntbuild里面最基本的操作单位是一次构建(build). 构建通过构建计划(Schedule)触发,也可以通过手工启动。 在Luntbuild里面一次构建会经过以下几个步骤:
从版本控制系统(VCS)中获取源码。
对当前源码打上标签,标签值就是当前构建的版本号.
在源码目录下运行相关的Ant/Maven/Command构建脚本(build script)。
在源码目录下运行相关的Ant/Maven/Command构建后处理脚本(post build script)。
发布构建的日志以及其他构建制品(build artifacts)。
构建的配置,监视,以及访问构建制品这些操作全部都通过web这种直观的方式来完成。 开发和测试团队集中式的获取这些构建信息。
激动的时间来到了,我们现在要做第一次登录Luntbuild的表演。Luntbuild的登录页面如下:

登录页面要求您输入Name(用户名) 和 Password(口令). 第一次登录请用默认的管理员帐号luntbuild/luntbuild(分别作为用户名和口令),如果您修改了安全配置,那么请使用 您在applicationContext.xml文件里面指定的口令(详情请参考 Luntbuild安全)。 登录以后您可以创建新的用户。
登录页面右上角有两个图标。这两个图标在所有的Luntbuild页面里都有,其中
链接到Luntbuild 用户指南。
而
链接到Luntbuild官方web站点。
输入用户名和口令之后,点击login(登录)按钮(或者直接按回车键)即可登录到Luntbuild系统。
成功登录后将会进入Luntbuild主页:

在主页上有五栏,分别是:
Builds(构建清单) - 概括显示当前的Luntbuild构建
Projects(项目列表) - 显示所有的Luntbuild项目
Users(用户列表) - 显示所有的Luntbuild用户
Properties(系统属性) - 显示Luntbuild的一些系统属性
Administration(系统管理) - 显示Luntbuild管理任务,例如导入/导出(import/export)
点击各栏就可以进入相应的页面。
每个页面的顶端是导航区
,
导航区将帮助您在Luntbuild的不同页面间进行快速切换。例如:如果您正在创建一个新的项目(通常是点击Project(项目)页上的New(新建)图标),
您可以通过点击导航区的Home(主页)快速返回主页面。
如果您在运行Luntbuild的时候遇到什么问题了,点击每一页右上角的system log(系统日志), 然后就会进入Luntbuild的系统日志页面。关于调试构建过程中遇到的问题, 详情请参考调试构建中的问题
每页的右上角还包含了刷新按钮
, 该按钮可以设置页面自动刷新功能为启动或者关闭状态。如果您正在跟踪运行中构建的状态,那么设置为自动刷新状态是个不错的选择。
如果要退出Luntbuild,只需要点击右上角的logout(退出)链接。
在Properties(系统属性)页里面列出的属性将会影响所有的Luntbuild项目。Luntbuild的系统属性详细解释如下:
在此指定访问Luntbuild的Servlet的url,在邮件通知里面会用到servlet url,因此设置正确的servlet url是很重要的。 通常这个的值的格式为http://<server>:<port>/luntbuild/app.do,其中<server> 是您的构建服务器的名字或者ip地址,而<port>是访问Luntbuild的端口号。 如果这个属性没有设置,那么Luntbuild将会使用默认值http://<server_ip>:8080/luntbuild/app.do, 其中<server_ip>是构建服务器的实际ip地址。
您可以根据需要指定Luntbuild的顶层工作目录,通常情况下,Lunbuild里面配置的各个项目会在该目录下建立 子目录(以项目名称命名)作为本项目自己的工作目录,用来从版本控制系统中检出源码。 如果没有指定该顶层工作目录,Luntbuild将使用Lunbuild安装目录下的work 子目录作为顶层工作目录。
您可以根据需要指定Luntbuild的顶层发布目录。每个产生的构建都会在该目录下建立子目录作为自己的发布 目录,用来存放该构建产生的制品,如日志和其他发布文件。该子目录格式为<project-name>/<schedule-name>/<build-version>。 如果没有指定该顶层发布目录,Luntbuild将使用Luntbuild安装目录下的publish 子目录作为顶成发布目录。
您可以以秒为单位指定页面刷新的时间间隔。如果没有设置该属性,那么默认值为15秒。
您可以根据需要指定SMTP邮件服务器,Luntbuild将通过它发送邮件通知。如果没有设置该属性, Luntbuild将使用本地机作为默认值。
该属性为可选属性,如果SMTP主机需要安全认证,那么您应该设置该属性来指定认证的用户名。
该属性为可选属性,该口令为上面的SMTP用户对应的口令。
Luntbuild需要Jabber帐号用于发送Jabber消息。
您可以根据需要指定Jabber服务器,用于发布Jabber消息。如果该属性没有设置,那么Luntbuild将使用本地机作为默认值。
连接Jabber服务器的端口号,默认值5222。
在此设置Jabber帐号名,Luntbuild使用Jabber帐号来登录Jabber服务器并发送消息。
Jabber帐号对应的口令。
Luntbuild可以通过MSN帐号N来发送创建通知信息。 例如luntbuild@hotmail.com。
MSN帐号的口令。
在一个多人团队里使用Luntbuild,首先应该先创建好Luntbuild用户,并分配适当的权限,即使该团队只有您一个人。 Luntbuild的用户可以收到构建状态的通知,同时被授权访问Luntbuild的不同部分。
创建Luntbuild用户的步骤:首先点击Users(用户),然后点击new(新建)图标(该图标在该页的右上角),然后进入以下页面:

填写以下信息:
在此提供一个唯一的名字用来确定一个用户。这个属性的值用于显示和登录。
用户的全名
勾上checkbox既给用户赋予创建新项目的权限。
在此提供一个初始化的口令(用户以后可以修改)。
在此指定用户的Jabber帐号,例如:johndoe@jabber.org。 关于Jabber的详情请参考 jabber.org。
在此指定用户的电子邮箱。
在此指定用户的MSN帐号,例如:foobar@hotmail.com
点击Project(项目)栏。
项目页面显示了当前的Luntbuild实例下所有的项目配置信息。 一个项目就是一个可以构建的单元,在其中配置了和构建有关的信息,例如:版本控制系统,项目Builder,构建计划等等。
点击页面右上角的New Project(新建项目)图标

提供一个唯一标识的项目名称。 请牢记对于每一个项目,都会在Luntbuild顶层工作目录和顶层发布目录下创建相应的子目录,而该子目录的名字就是项目名。
项目的描述信息。
在此选择角色为'project admin'的用户
在此选择角色为'project builders'的用户
在此选择角色为'project viewers'的用户
在构建后以何种方式通知相关人员
在项目构建完成后接收通知的用户
定义项目有关的变量,每行定义一个变量,例如
| a=1 |
| b=2 |
可以在其他的OGNL表达式中引用或者指定这里定义的变量,例如, 在设置构造构建计划的"next build version"属性的时候可以直接引用这里定义的变量。 数字型的变量可以递增或递减,例如,如果您有两个构建计划分别为"nightly"和 "release", 并希望发生在这两个计划的构建共享同一个递增的版本号,那么您可以定义下面这样的变量:
| versionPart=foo-1.0.0 |
| iterationPart=1 |
然后设置这两个构建计划的"next build version"属性。
| ${project.var["versionPart"]} (${project.var["iterationPart"].increaseAsInt()}) |
通过这种方式,这两个构建计划的构建版本号将会包括两个部分:第一部分为"versionPart"的值,第二部分为"iterationPart" 的值,而"iterationPart"会随着每次构建而递增。最终构建的版本号就是下面这个样子:
| foo-1.0.0 (build 1) |
| foo-1.0.0 (build 2) |
| foo-1.0.0 (build 3) |
| ... |
您还可以定义许多其他类型的版本策略,详情参考构建计划的 next build version 属性。
定义项目的日志级别,将会影响到构建日志的详细程度。
首先选择“VCS Adaptors”控制面板标签
点击该面板右上角"New VCS Adaptor"图标。
选择版本控制系统
以下地址可以下载AccuRev: http://www.accurev.com/download/index.htm. 下面是该适配器的属性列表:
AccuRev 端口号的格式为<servername>:<port>,其中<servername> 和 <port> 应该用实际的AccuRev的服务器名和端口号代替。 该属性是可选的,该属性的值会覆盖acclient.cnf值。
在该目录下保存accurev的可执行文件 如果如果系统目录下没有包含accurev的可执行文件,那么应该放在 在该目录下。
从VCS check out代码来进行创建之前的等待周期(也就是多长时间没有用户check in),以秒为单位。 这是为了避免在其他人正在做check in的过程中check out代码。 该属性为可选,如果该属性没有设置,那么在check out代码出来创建之前不会有等待周期。
首先在用于创建的机器上必须安装了Clearcase客户端。 同样您还应该保证启动您的应用服务器或者servlet容器的帐号能够访问Clearcase服务器,而且能做视图快照。 下面是该连接的属性列表。
Clearcase 服务器端视图存储的位置,该属性用于创建当前项目的Clearcase视图的stgloc选项值。 该属性和"Explicit path for view storage"只指定一个即可
只有"Clearcase view stgloc name"属性没有指定的时候该属性才需要。 如果指定了,那么创建当前项目的Clearcase视图的时候,该值将作为-vws选项值代替-stgloc选项
Config spec 用于创建Clearcase快照视图
如果在上述的Config spec下指定要获取某些分支下的最新版本,这个时候该属性有效。Luntbuild用 该属性来决定自上一次创建后资料库是否发生了改变。该属性包括了多种条目,每个条目的格式为 "<path>[:<branch>]" 其中<path>是VOB下的路径,该值对于上述的config spec是可见的。对于该目录下的任何子目录, Luntbuild会检查clearcase服务器端内容是否发生了变化。 如果<branch>指定了,那么Luntbuild将会检查指定的分支里的内容是否发生了变化。 多个条目可以通过";"符号或者多行来区分。
当您使用Luntbuild为当前项目创建有关的Clearcase快照视图的时候,可以执行mkview sub命令的命令行选项。 可以指定的命令行选项包括-tmode, -ptime, and -cachesize,例如您可以指定"-tmode insert_cr",这样就使用 Windows的文本行终结符。
cleartool可执行文件所在的路径。如果在系统的路径下找不到cleartool的可执行文件,就会在 这里设置的目录下找。
在Luntbuild准备从VCS检出代码前,需要确保最近一次检入操作距离现在的最短时间(单位为秒),在这段时间不能有新的检入操作。 这样是为了避免有其他用户正在做检入的过程中Luntbuild做检出的操作,从而导致捡出代码的不一致性。 该属性为可选属性,如果为空,Luntbuild就会立刻检出代码,并执行构建,而不会检测当前VCS中是否有正在进行的检入操作。
如果您使用的是Windows平台,首先在您的平台上安装相应的CVS客户端,可以从下面的网站下载相应的安装包 http://www.cvshome.org 或者 http://www.cvsnt.org
下面是cvs连接的一些属性
例如:pserver:administrator@localhost:d:/cvs_repository。 如果您的连接方式是ssh,请设置:ext:协议,并且要设置好ssh相应的环境,这些设置都在都在Luntbuild外进行。 详情参考cvs用户指南。
使用pserver协议来连接的CVS口令
该属性指要使用的cvs是否是cygwin下的cvs? 可选的值为"yes"或"no",默认值为"no"。
该选项用来设置log命令的"-S"选项是否禁止? 可选的值为"yes"或"no",默认值为"no"。 在log命令中使用-S选项可以加速对cvs代码库中发生变化的检测, 不过早期的cvs并不支持该选项。如果是早期的cvs版本,请输入"yes"来禁止该选项。
该属性用来设置在检测CVS代码库的变化的时候是否禁止history命令。 可选的值为"yes"或"no",默认值为"no"。 和log命令一起使用history命令可以加速对cvs代码库中发生变化的检测, 但是,有些cvs代码库并没有保存commit的历史信息,这种情况下,应该使用"yes"来禁止该命令。
cvs可执行文件所在的路径。如果在系统路径下找不到cvs的可执行文件,就会在 这里设置的目录下找。
在Luntbuild准备从VCS检出代码前,需要确保最近一次检入操作距离现在的最短时间(单位为秒),在这段时间不能有新的检入操作。 这样是为了避免有其他用户正在做检入的过程中Luntbuild做检出的操作,从而导致捡出代码的不一致性。 该属性为可选属性,如果为空,Luntbuild就会立刻检出代码,并执行构建,而不会检测当前VCS中是否有正在进行的检入操作。
该属性为可选属性。如果指定了,那么会以文件的修改时间为检测对象来检测源目录内容的变化。 所有检测到的已修改的文件将会复制到项目工作目录下,并在此基础上进行构建。
在Luntbuild准备从VCS检出代码前,需要确保最近一次检入操作距离现在的最短时间(单位为秒),在这段时间不能有新的检入操作。 这样是为了避免有其他用户正在做检入的过程中Luntbuild做检出的操作,从而导致捡出代码的不一致性。 该属性为可选属性,如果为空,Luntbuild就会立刻检出代码,并执行构建,而不会检测当前VCS中是否有正在进行的检入操作。
首先应该在构建的机器上安装Perforce客户端。关于许可证信息请联系http://www.perforce.com。 下面是该连接的属性列表:
Perfoce端口格式<port>, 或者 <servername>:<port>, 其中<servername> 和 <port> 将被实际的Perforce服务器名和端口代替。
在此指定访问Perfoce服务器的用户名。该用户应该有创建和修改客户端描述符(client specifications)的权限, 还应该有检出代码以及给代码打上标签的权限。
Perforce用户对应的口令。如果Perforce没有使用基于口令的安全机制,那么这里口令可以为空。
设置客户文本文件的行结束符。目前可设置的值如下:
| local: use mode native to the client |
| unix: UNIX style |
| mac: Macintosh style |
| win: Windows style |
| share: writes UNIX style but reads UNIX, Mac or Windows style |
该属性为可选属性。如果没有指定,那么默认值为"local"
P4可执行文件所在的路径。如果在系统的路径下找不到cvs的可执行文件,就会在 这里设置的目录下找。
在Luntbuild准备从VCS检出代码前,需要确保最近一次检入操作距离现在的最短时间(单位为秒),在这段时间不能有新的检入操作。 这样是为了避免有其他用户正在做检入的过程中Luntbuild做检出的操作,从而导致捡出代码的不一致性。 该属性为可选属性,如果为空,Luntbuild就会立刻检出代码,并执行构建,而不会检测当前VCS中是否有正在进行的检入操作。
首先请在您的构建服务器上安装好Subversion的客户端。 subversion的下载地址为http://subversion.tigris.org.
下面是Subversion连接的属性列表:
Subversion的“根”url,例如:"svn://buildmachine.foobar.com/"或者"file:///c:/svn_repository" 或者"svn://buildmachine.foobar.com/myproject/othersubdirectory",等等。 其他的例如标签的目录,分支的目录,模块等等都是相对于该“根”url的。
指定在上述根url下用于存放主分支代码(trunk)的目录。该目录是根url的相对目录。 如果在根url下没有定义任何trunk目录,那么该属性的值为空值。
指定在上述根url下用于存放分支代码的目录。该目录是根url的相对目录。 如果不设置该属性,那么Luntbuild将采用默认值,即"branches"。
指定在上述根url下用于存放标签的目录。该目录是根url的相对目录。 如果不设置该属性,那么Luntbuild将采用默认值,即"tags"。
登录Subversion的用户名。
登录Subversion的用户的口令。
svn可执行文件所在的路径。如果在系统的路径下找不到svn的可执行文件,就会在 这里设置的目录下找。
在Luntbuild准备从VCS检出代码前,需要确保最近一次检入操作距离现在的最短时间(单位为秒),在这段时间不能有新的检入操作。 这样是为了避免有其他用户正在做检入的过程中Luntbuild做检出的操作,从而导致捡出代码的不一致性。 该属性为可选属性,如果为空,Luntbuild就会立刻检出代码,并执行构建,而不会检测当前VCS中是否有正在进行的检入操作。
首先需要在构建服务器上安装Clearcase客户端。 同时还要确保运行应用服务器和servlet容器的帐户能够访问Clearcase服务器,并且能够创建快照视图。 下面是该连接的一些属性:
在此指定Clearcase视图存储位置的名字,其值将作为创建Clearcase视图的stgloc选项的值。
在此指定项目vob的标签,例如\pvob1
如果"Clearcase view stgloc name" 属性的值为空,那么本属性的值就必须设置。 如果指定了本属性的值,其值作为创建Clearcase视图的-vws选项的值,并且会代替原来使用的-stgloc选项。
在此指定UCM流的名字。
指定在UCM流内部要构建的基线。如果要指定多个基线,那么中间用空格分开。 下面的值具有特殊的意义:
| <latest>: 基于每个组件最新的代码进行构建。 |
| <latest baselines>: 基于每个组件最新的基线进行构建。 |
| <recommended baselines>: 基于推荐的基线进行构建。 |
| <foundation baselines>: 基于所有的最基础的基线进行构建。 |
当"What to build"属性的值为"latest"时,本属性的值有效。 Luntbuild用该属性来决定自上一次创建后资料库是否发生了改变。该属性包括了多种条目,每个条目的格式为 "<path>[:<branch>]" 其中<path>是VOB下的路径,该值对于上述的config spec是可见的。对于该目录下的任何子目录, Luntbuild会检查clearcase服务器端内容是否发生了变化。 如果<branch>指定了,那么Luntbuild将会检查指定的分支里的内容是否发生了变化。 多个条目可以通过";"符号或者多行来区分。
在通过Luntbuild来创建当前项目有关的clearcase的快照视图的时候,您可以有选择性的指定mkview sub命令的扩展选项。 目前可以指定选项限定为-tmode, -ptime, 和 -cachesize。例如,您可以指定"-tmode insert_cr",这样可以使用Windows 的行结束文本模式。
在此指定clearcase工具可执行文件所在路径,如果这些可执行文件不在系统路径下,就应该在此指定其所在的目录。
在Luntbuild准备从VCS检出代码前,需要确保最近一次检入操作距离现在的最短时间(单位为秒),在这段时间不能有新的检入操作。 这样是为了避免有其他用户正在做检入的过程中Luntbuild做检出的操作,从而导致捡出代码的不一致性。 该属性为可选属性,如果为空,Luntbuild就会立刻检出代码,并执行构建,而不会检测当前VCS中是否有正在进行的检入操作。
首先在构建服务器上安装VSS软件,下载地址http://download.microsoft.com。 下面是VSS连接的属性:
该目录是srcsafe.ini文件所在目录。例如:\\machine1\directory1 这个路径名要么用主机名要么用主机的ip地址,而且要确保运行应用服务器或者servlet容器的帐号事先已经登录 到这台机器上,否则在构建时Luntbuild会汇报一个“No VSS database found”的错误。
登录该VSS的用户名。
上面指定的用户的口令。
指定VSS的history命令的日期时间格式。该属性为可选属性,如果该属性的值为空,那么Luntbuild将使用 默认值"M/dd/yy;h:mm:ssa"。 默认值只适合使用US的英文操作系统。 对于其他的使用英语的国家,例如英国,澳大利亚,加拿大,VSS使用的时间格式为(假设VSS的本地语言已经设置为相应的值):
'd/M/yy;H:mm'
如果Luntbuild运行的操作系统为非英文的操作系统,可以通过以下方法决定使用的日期时间格式:
打开安装在您的构建服务器上的VSS,选择一个现有的VSS数据库,然后查看里面的项目和文件。 在文件列表框里面有几栏,其中一栏是"Date-Time"。可以使用这个位置相应的"datetime format"(日期时间格式)。 例如,如果其中一个的值为 "04-07-18 20:19",那么相应的"datetime format"(日期时间格式)为 "yy-MM-dd;HH:mm" 注意在日期和时间之间的semicolon(分号)一定要指定。 在这里鼓励大家将该属性设置为"yy-MM-dd;HH:mm:ss",这样可以提高精确度。 例如,如果VSS里面的日期时间为"7/18/04 8:19p",那么相应的"datetime format"(日期时间格式) 为"M/dd/yy;h:mma"。 这个时候如果设置为 "M/dd/yy;h:mm:ssa",那么可以增加准确性。
下面是从JDK文档中节选的部分格式化字符的信息:
表 7.1. Date/Time format characters(日期时间格式化字符)
| 字符 | 解释 | 例子 |
|---|---|---|
| y | 年 | 1996 ; 96 |
| M | (一年中的)月 | July ; Jul ; 07 |
| d | (一个月中的)日 | 10 |
| a | Am/pm(上下午)标志 | p |
| H | (一天中的)小时,范围(0-23) | 0 |
| h | (上午或下午的)小时,范围(1-12) | 12 |
| m | (小时中的)分钟 | 30 |
| s | (分钟中的)秒 | 55 |
详情参考 http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html
在此指定ss.exe文件所在的路径,如果ss.exe文件不在系统路径下面,Luntbuild就会使用这个属性的值作为寻找该ss.exe 文件的目录。
在Luntbuild准备从VCS检出代码前,需要确保最近一次检入操作距离现在的最短时间(单位为秒),在这段时间不能有新的检入操作。 这样是为了避免有其他用户正在做检入的过程中Luntbuild做检出的操作,从而导致捡出代码的不一致性。 该属性为可选属性,如果为空,Luntbuild就会立刻检出代码,并执行构建,而不会检测当前VCS中是否有正在进行的检入操作。
首先在Windows平台上完全安装StarTeam SDK的运行时套件(把运行时dll安装在Windows系统目录下)。 通常这是StarTeam客户端安装程序的一部分。 许可信息请参考http://www.borland.com. 下面是该连接的一些属性:
StarTeam项目的位置,格式<servername>:<portnum>/<projectname>, 其中<servername>是StarTeam服务器名字,<portnum>是服务器使用的端口号,默认值49201。 <projectname>是运行在StarTeam服务器上的StarTeam的项目名。
登录StarTeam服务器的用户名。
登录StarTeam服务器的口令。
该属性可选的值如下:
all: 所有ASCII码文件将其行结束符调整为和检出的客户机的行结束符一致。
no: 检出的文件的行结束符以服务器为准。
该属性为可选属性。如果没有指定,默认值为yes。
在Luntbuild准备从VCS检出代码前,需要确保最近一次检入操作距离现在的最短时间(单位为秒),在这段时间不能有新的检入操作。 这样是为了避免有其他用户正在做检入的过程中Luntbuild做检出的操作,从而导致捡出代码的不一致性。 该属性为可选属性,如果为空,Luntbuild就会立刻检出代码,并执行构建,而不会检测当前VCS中是否有正在进行的检入操作。
点击某个VCS定义页面里面的New Module(新建模块)图标。 如果定义了多个VCS模块,那么Luntbuild会按序依次检出这些模块。 如果后面模块目标路径和前一个模块有部分重叠,那么这部分重叠的路径将会被后一个模块覆盖。 例如:假设您定义了一个模块,其目标路径为"/foo/bar", 然后又定义了第二个模块,其目标路径为"/foo", 那么从第二个模块检出的内容将完全覆盖第一个模块。 反过来,如果第一个模块的目标路径为"/foo", 第二个模块的目标路径为"/foo/bar",那么第一个模块检出的"/foo/bar"下的内容会被第二个模块覆盖, 而在检出代码中的其他路径比如/foo/another_bar,将不会被覆盖。
标签在AccuRev里面是用于同步的事务编号。在此指定您希望基于哪个事务编号进行构建。
用于检出代码 Accurev储存位置。
构建模块的回溯流的名字。 The backing stream should be able to have streams created from it by the build user.
指定同回溯流关联的构建流名称 (如果该构建流 存在,它将被自动创建)。 基于这个流,一个相关的引用树将会被创建(树的名称为流的名称加上"_reference"后缀)。
指定从CVS代码库中获取代码的路径,例如:testcvs/src
指定前面的源路径的分支。该选项是可选的。如果没有设置相应的值,那么将把主分支作为默认值。
指定前面的源路径的标签。该选项也是可选的。 如果指定了该值,那么该值将优先于分支的值。如果没有设置相应的值,就会检出上述指定分支里面的最新代码。
"Source path"(源路径)代表了CVS代码库中模块的意思,例如"/testcvs", "/testcvs/web",或者"testcvs"。 但是不能用"/"或者"\"这两个字符来定义源路径。 "Branch"(分支)就是CVS分支(branch),而"Label"(标签)就是CVS的标签(tag)。 对于某个模块,这二个属性(branch和label)中只有一个的值有效。 如果都不为空,那么标签将优于分支。 如果都为空,Luntbuild则从主分支获取最新的代码。
指定Perforce存储位置的路径,例如"//depot/testperforce/...".
指定前面的存储位置路径上的标签。该属性是可选的。 如果为空,那么将会检出该存储路径上最新的版本。
指定客户端的路径,例如"//myclient/testperforce/...".
Depot path: -//depot.side
Client path: //client.side
Perforce的模块定义把代码库的Depot路径("Depot path")映射到客户端路径("Client path")。 Luntbuild也支持Perfoce的标签属性。 Depot路径("Depot path")表示Perforce代码库中的路径,例如 "//depot/testperforce/..." 客户端路径("Client path")表示客户端的路径(也就是Depot路径下的内容检出之后保存在客户端的什么目录下), 例如"//myclient/testperforce/..." "Label"是Perfoce标签,如果您想获取指定的Depot路径下的内容的某个时刻的快照,那么就需要使用标签。 如果标签为空,那么获得的Depot路径下的内容为head版本。 客户端路径对应的目录不一定要存在。 如果不存在那么Luntbuild会自动创建相应的目录。 在Perfoce的连接信息中指定的用户应该有足够的权限来创建或者修改Perforce的参数。
即Subversion代码库中的路径,例如"testsvn", "testsvn/web", 或者 "/testsvn"。 当"branch"(分支) 或者 "label"(标签)属性指定的时候,本路径会映射到svn代码库的另一个路径。
指定以上源路径的分支。该属性为可选项,如果不设置,那么将使用默认值trunk。
指定以上源路径的标签。该属性为可选的。如果设置了该属性,其优先级高于分支。如果不设置,就采用指定分支的head version。
该属性为可选的。目标路径相对于项目的工作目录,如果设置了相应的值,那么从subversion代码库中获取的代码将保存在该目录下。 否则将会在项目的工作目录下创建一个以源路径命名的目录,从subversion获取的代码将保存在该目录下。
"Source path"(源路径)即Subversion代码库中的路径,例如"testsvn", "testsvn/web", 或者 "/testsvn"。 Luntbuild在其他的属性值基础上将该路径映射到Svn代码库中的路径。 我们定义了以下属性来描述这种映射方式:
| Repository url base: svn://localhost |
| Directory for trunk: trunk |
| Directory for branches: branches |
| Directory for tags: tags |
可以试验一下下面的模块设置和路径映射:
Luntbuild从ulr"svn://localhost/trunk/testsvn/web"下检出代码, 并保存在"<project work directory>/testsvn/web"下面。
Luntbuild从ulr "svn://localhost/branches/simplified-chinese/testsvn/web"下检出代码, 并保存在"<project work directory>/testsvn/web"下面。
Luntbuild从ulr "svn://localhost/tags/v1_0/testsvn/web"下检出代码, 并保存在"<project work directory>/testsvn/web"下面。
Luntbuild从ulr "svn://localhost/tags/v1_0/testsvn/web" 下检出代码, 并保存在"<project work directory>/testsvn/web/simplified-chinese"下面。
当Luntbuild给检出到目录"<project work directory>/testsvn/web"下的代码打上标签,例如是"v1_0", 会执行下面的代码:"svn copy <project work directory>/testsvn/web svn://localhost/tags/v1_0/testsvn/web"
如果将"Directory for trunk","Branch"和"Label"三个属性都设置为空值,就可以避免上面的url映射。 通过这种方式,只设置"Source path" 和 "Destination path"属性,您就可以控制从什么地方检出代码,并将检出的代码保存在什么地方。 这种情况下,源路径只会把"repository url base"属性的值作为前缀。
在此指定在VSS代码库中的路径,例如"testvss", 或者"/testvss".
在此指定上面设置的源路径上的标签,该属性为可选的,如果为空,就使用最新的版本。
指定相对于项目工作目录的目标目录,从源目录下获取的代码就保存在这个目录下。 该属性为可选的,如果该属性为空,Luntbuild会在项目工作目录下建一个和源目录的目录结构一致的目录, 并将检出的代码保存在这个目录下。
源路径其实就是相对于VSS代码库根目录的的项目路径,例如"testvss", "/testvss", 或者 "/testvss/web"等等。 使用"/" 或者 "\",都可以获取整个代码库的内容。 标签指VSS标签。VSS通过创建一个新的共享的项目来实现分支功能。 因此您需要配置不同的模块,这样才能从不同的分支获取代码。 如果某个模块的标签为空,Luntbuild则从VSS获取该模块的最新代码。 如果定义目标路径属性,那么从VSS获取的代码将会保存在相对于项目工作目录的目标目录下。 否则会保存在相对于项目工作目录并且和源目录的目录结构一样的目录下。
在此指定StarTeam视图。该属性为可选属性。如果为空,Luntbuild使用当前的StarTeam项目的根view。
在此指定相对于StarTeam视图的路径。"/"代表根路径。
指定以上StarTeam视图的标签。该属性为可选属性。如果为空,就以指定视图上的最新代码为准。
指定相对于项目工作目录的目标目录,从源目录下获取的代码就保存在这个目录下。 该属性为可选的,如果该属性为空,Luntbuild会在项目工作目录下建一个和源目录的目录结构一致的目录, 并将检出的代码保存在这个目录下。
"StarTeam view"指StarTeam的视图,"Label"指StarTeam视图的标签。 如果"StarTeam view"为空,Luntbuild就使用StarTeam的根视图。 "Source path"是相对指定的StarTeam视图根目录的路径。 如果定义了"Destination path"性,那么从StarTeam代码库获取的代码将会保存在相对于项目工作目录的目标目录下。 否则会保存在相对于项目工作目录并且和源目录的目录结构一样的目录下。
Builder根据项目特定的构建计划执行相应的创建活动。
新建Builder的步骤:首先点击"Builders",然后点击该页右上角的"New"图标
然后就会进入Builders编辑页面。

首先选择适当的Builder类型。 目前可以选择的Builder包括:
| Ant Builder |
| Command Builder |
| Maven Builder |
对于指定的项目,根据不同任务的需要,可以创建所需的builders,创建的数目没有限制,这个根据需求而定。 然后针对项目的每个构建计划,从这里定义的一套builder里面挑选出相应的builder或者post-builder。
提供一个用于标识该builder的名称,该名称以后可以修改。
指定运行Ant的命令(通常是ant.bat或者ant的shell文件及其所在的目录) 例如:/path/to/ant 包含在${...}里面的字符串被当作是OGNL表达式,而且在构建前被替换成实际值。 每个OGNL表达式都需要有一个对应的JAVA根对象来对表达式求值(通过反射机制),这里的根对象就是当前的Builder对象。
您可以修改Ant命令以添加命令行选项和属性,例如-Ddebug=_debug.
Ant的构建脚本文件(buildfile)所在的路径,如果该目录非绝对路径,Luntbuild认为该目录是相对项目工作目录的。
指定需要构建的目标,使用空格来分隔不同的目标(包括空格符的目标名需要用引号括起来,这样是为了避免被当成是多个目标来处理)。 如果没有指定目标,那么将使用ant构建文件的默认目标。 同样地,您可以使用OGNL表达式(${...})来传递变量,该变量作为构建的目标名。 例如,您可以使用${build.schedule.name}变量,该变量的作用是可以根据不同的构建计划使用不同的构建目标。 每个OGNL表达式都需要有一个对应的JAVA根对象来对表达式求值(通过反射机制),这里的根对象就是当前的Builder对象。
在此定义需要传递给ant构建脚本的属性,例如:
| buildVersion=${build.version} |
| scheduleName=${build.schedule.name} |
每一行只能设置一个变量。这里支持使用OGNL表达式格式,即${...}。 每个OGNL表达式都需要有一个对应的JAVA根对象来对表达式求值(通过反射机制),这里的根对象就是当前的Builder对象。
设置运行builder的环境变量,例如:
| MYAPP_HOME=${build.schedule.workingDir} |
| SCHEDULE_NAME=${build.schedule.name} |
每一行只能设置一个变量。可以在变量里插入OGNL表达式(即${...})。 每个OGNL表达式都需要有一个对应的JAVA根对象来对表达式求值(通过反射机制),这里的根对象就是当前的Builder对象。
构建成功条件式是一个用来判断当前项目是否成功构建的OGNL表达式 每个OGNL表达式都需要有一个对应的JAVA根对象来对表达式求值(通过反射机制),这里的根对象就是当前的Builder对象。 如果不设置该属性,那么会使用默认值————result==0 and logContainsLine("BUILD SUCCESSFUL")。 当这个表达式的值为true的时候,就认为本次构建是成功的。 下面的一些例子演示了OGNL表达式的格式。
| result==0, 此处的"result"表示ant构建结果的返回值。 |
| logContainsLine("^ERROR.*"), 如果构建的日志里面的某一行匹配正则表达式"^ERROR.*",那么就认为该表达式为true。 关于正则表达式的格式请参考 http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html |
| 以上的表达式可以使用'!'符号,该符号的作用是用来求相反的值。 例如,!logContainsLine("^ERROR.*"),如果构建日志里没有包括匹配指定模式的行,那么该表达式的值为true。 |
| 以上的表达式可以通过"and"和"or"逻辑运算符组合成新的表达式。 例如,表达式result==0 and !logContainsLine("^ERROR.*"),如果ANT执行构建的结果为0,且构建的日志不 包括以"ERROR"字符串打头的行,那么该表达式的值为true。 |