原:http://www.ibm.com/developerworks/cn/java/j-ap09056/
在我脑海里,我至少能想到 12 种在当前市场上可用的 CI 服务器,包括商业的和开源的。虽然它们都试图自动进行软件构建的过程,但是都有各自的优点和不足。而且,有太多工具可供选择的不良后果就是很难决定究竟应该选择使用哪个。
在选用自动化过程的工具时,要时刻记住的就是:工具要 确实适用。选择错误的工具可能会限制整体的灵活性,会导致执行简单动作反而需要更长时间,或者会把人锁定在特定的支持工具或过程。
选择 CI 服务器的标准
通常,对一个新工具的决策分析可以归结如下:
我听说 Tim 在使用 Acme Inc 的工具,而且我认为 Tim 是个聪明人。所以,我也要使用 Acme Inc 的工具。现在我也是个聪明人了。
反过来,如果您问 Tim 为什么 他选择使用 Acme Inc 的工具,您可能会发现是他的公司强制要求使用的。这就是为什么重要的是要根据 自己的 具体技术和政策需求对工具进行分析。如果不这么做,可能就会选择到不符合需求的工具,甚至更糟糕的是,不能带来任何帮助的工具。
在决策的时候,通常多数人都会把重点放在工具的特性上。但是要记住,虽然特性的确重要,但还有其他指标需要考虑。在我的实践中,我发现以下五个指标在评估工具时最有帮助:
而且不要忘记,客观地 检查这五个方面也是重要的。
产品特性
说到 CI 服务器的特性,应当考虑该工具与版本控制系统的集成、处理构建平台(例如 Ant 和 Maven)的能力以及提供反馈和报告的能力。而且不要忘记检查其他特性,例如构建标号和管理项目的依赖项。最后,在需要做一些特定的增强时,理解产品的可扩展性会很有帮助。
表 1 详细说明了每个特性:
表 1. 详细的 CI 服务器评估特性
特性
解释
版本控制系统集成 |
如果工具不支持您所使用的特定版本控制系统,您真的会为它编写一个定制集成么? |
构建工具集成 |
在选择 CI 服务器时,需要考虑目前或将要使用哪个构建工具。对于 Java™ 编程,有两个自然的选择:Ant 和 Maven,几乎所有 CI 工具都支持它们。如果构建系统既不是 Ant 也不是 Maven,那么 CI 工具支持从命令行运行程序的功能么? |
反馈和报告 |
想想老话 “如果树倒在森林中,能有人听到么?” 如果构建失败,会有人知道么?如果没人知道,那么使用 CI 工具的目的是什么?所有的 CI 工具都提供一些通知机制,但是哪个最适合您呢?电子邮件?即时消息?RSS? |
标号 |
有些开发团队喜欢跟踪构建,给构建一个唯一的标号,这样日后就能找到具体的构建实例。如果这对您来说很重要,那么要注意只有少数 CI 服务器提供了这个功能。 |
项目依赖项 |
某些情况下,在构建了一个项目之后,可能需要构建其他依赖项目。有些 CI 服务器支持这个特性,有些不支持。 |
易于扩展 |
扩展工具当前的功能有多容易?是否用插件就可以实现简单的扩展,还是总得修改代码? |
从特性的角度来说,以上提到的几点在选择所需要的正确的 CI 服务器时,至关重要。
产品可靠性
因为下载和使用开源 CI 服务器很简单,所以可以试用产品来判断它的可靠性。而且,在工具的可靠性和它在市场上的时间之间,通常存在一些相关性。使用新产品时,就会冒着有未发现的 bug 的风险。而且,用户群是发现工具出现的问题的优秀资源。大量的问题贴子或者过多的复杂问题,就表示用户对这个工具的意见较大。
因为我这里讨论的服务器是开源的,所以很容易发现下载的人数,这也会是产品健康程度的一个指示。用户少可能意味着反馈渠道少,可能需要换个地方看看。
寿命前景
在下载 CI 服务器之前,了解这个服务器未来的前景会有帮助。简单地说,使用已经死亡或正走向死亡的产品不是个好主意。可以检查该工具已经出现了多少年、在它的用户群中是否有正常数量的活动。就像可以从用户群来判断产品的可靠性一样,活跃的社区是工具未来前景良好的征兆。
目标环境
CI 服务器不能在 所有 环境下工作。需要考虑服务器支持哪个操作系统以及具体的系统需求。例如,如果工具是用最新版本的 Python 编写的,那么需要确定这个版本 Python 能够用于自己的操作系统。
易用性
产品的易用性可能是最主观的指标。有些人愿意手工修改配置文件,而有些人想让所有管理任务都在应用程序中执行,例如 Web 控制台。有些服务器要求从一个屏幕单击到下一个屏幕来执行简单的管理,而其他服务器则提供了直观的向导。
如果想理解 CI 服务器的具体细节,那么漂亮的管理 Web 表单就不重要了;但是,如果人手不足、工作繁忙,那么可能不会想在管理 CI 服务器上花太多时间。
记住我在这节讨论的五个方面,再来看一下三个 CI 服务器:Apache 的 Continuum、CruiseControl 和构建管理服务器 Luntbuild。
回页首
Apache Continuum
Continuum 是最新的 CI 服务器之一,也是值得关注的一个新进入者。Continuum 的安装和配置很简单:只要下载和释放 ZIP 文件,运行命令行程序,就可以运行了。基于 Web 的界面使得配置项目很容易。而且,还不需要安装 Web 服务器,因为 Continuum 内置了 Jetty Web 服务器。并且,Continuum 可以作为 Windows 服务运行,还在应用程序的某些部分嵌入了上下文敏感的文档,从而提供了很多帮助。
易于使用
在使用 Continuum 时会注意到的第一件事就是它的易用性。能够在几分钟之内就把服务器运行起来并让它去查询修改。实际上,在 Windows 上启用 Continuum 只需要四步:
- 下载 Continuum ZIP 文件(请参阅 参考资料)。
- 把文件的内容释放到本地目录。
- 运行 run.bat 文件,然后运行 InstallService.bat。
- 打开浏览器指向 http://localhost:8080/。
Continuum 内置支持五个版本控制系统:Subversion、CVS、StarTeam、Bazaar 和 Perforce。也部分地支持其他版本控制工具,例如 Visual Source Safe 和 ClearCase。 Continuum 还支持四种构建机制:Ant、Maven1、Maven2 和 Shell(命令行)。
配置 Continuum
在第一次访问 Continuum Web 应用程序时,默认是 guest 帐户。guest 提供了对所有项目的只读存取,没有管理或配置项目的能力。但是,可以很容易地创建 Administrative 用户,然后设置一些适用于所有项目的属性。
图 1 显示了管理页面,它提供了管理所有项目的 Continuum 设置的能力,包括创建 Admin 帐户、构建的输出和部署目录:
图 1. Continuum 的配置很简单
把项目添加到监视器
对 Continuum 进行配置让它监视项目也非常简单。简单到仅仅是选择期望的构建平台,例如 Ant 或 Maven2,然后把 Continuum 指到期望的版本控制系统。
图 2 显示了设置 Ant 项目时需要填充的字段:
图 2. 在 Continuum 中创建项目
在保存了这个信息之后,Continuum 每小时查询版本控制系统一次。可以修改项目的设置,查询得更频繁或更少些。我们在这里谈到的是 持续 集成,我建议每五 分钟检查修改一次,而不要每小时一次。
默认情况下,在使用 Ant 时,Continuum 在项目的根目录查找项目的 build.xml 文件。如果使用不同的名称或者这个文件不在项目的根目录,可以修改这个设置。
虽然 Continuum 还是 CI 舞台上的新人,但是它以其易用性和对当前众多流行的版本控制系统和构建工具的支持,还是给这一领域带来了巨大的冲击。我希望在未来的版本中会有添加和查看报告的功能。
回页首
CruiseControl
CruiseControl 是 CI 服务器的老者。它已经用了有五年多了,在许多方面, CruiseControl 服务器 已经成为持续集成实践的同义词。出于完全坦白的目的,我应当提到,我也是 CruiseControl 的多年的老用户。
改进的安装
如果您从最后一次使用 CruiseControl 到现在已经有段时间,而且认为它的安装和配置是个负担,那么您可以看看最新版本。现有,有许多方式安装 CruiseControl。例如,如果使用 Windows,会发现最简单的方式是下载二进制可执行文件,然后运行它。不用担心,还可以下载源代码。
安装之后,CruiseControl 预先配置了一个配置文件,轮询 CVS 存储库并执行 Ant 构建脚本。同样也不需要安装 Web 服务器,因为 CruiseControl 也内嵌了 Jetty。
轮询版本控制系统
比起 Luntbuild 和 Continuum,CruiseControl 提供了对超过十种不同版本控制系统的支持。而且,CruiseControl 对这些工具中的许多定制命令也提供了支持。清单 1 是一个使用 CruiseControl config.xml 脚本轮询 Subversion 存储库的示例:
清单 1. 通过 config.xml 文件轮询存储库
<listeners>
<currentbuildstatuslistener file="logs/${project.name}/status.txt"/>
</listeners>
<modificationset quietperiod="30">
<svn RepositoryLocation="http://www.qualitylabs.org/svn/ambientorb/trunk"
username="bfranklin"
password="G0Fly@Kite"
/>
</modificationset>
|
执行构建脚本
当在版本控制系统(例如 Subversion)中发现修改时,可以很容易地配置 CruiseControl 去执行委托的构建脚本。例如,清单 2 演示了从 config.xml 调用 Ant 脚本,它指示 CruiseControl 每 60 秒钟查询 Subversion 存储库一次,并执行另一个 Ant 脚本。 委托的构建脚本(没有显示)删除旧文件,从 Subversion 签出最新的源代码,并在代码上运行项目的构建脚本。
清单 2. 执行 Ant 构建脚本
<schedule interval="60">
<ant anthome="apache-ant-1.6.5" buildfile="build-${project.name}.xml"/>
</schedule>
|
当设置了 CruiseControl 的这个方面并启动服务器之后,可以访问如图 3 所示的 CruiseControl Web 控制板:
图 3. CruiseControl 控制板
CruiseControl 控制板
要接收最新构建的反馈,可以把 htmlemail
插件添加到清单 3 所示的 config.xml 脚本。可以用 config.xml 文件配置更多反馈机制,例如发送文本消息、电子设备(通过 X10)、甚至即时消息。
清单 3. 用 CruiseControl 发送电子邮件
...
<plugin name="htmlemail"
buildresultsurl="http://${env.COMPUTERNAME}/cruisecontrol/buildresults/${project.name}"
mailhost="${smtp.server}"
username="${mail.username}"
password="${mail.password}"
returnaddress="${buildmaster.email}"
returnname="${buildmaster.name}"
subjectprefix="${project.name} build"
xsldir="webapps/cruisecontrol/xsl"
css="${reportdir}/cruisecontrol.css"/>
...
<htmlemail>
<always address="${buildmaster.email}"/>
<failure address="${buildmaster.email}"/>
</htmlemail>
|
CruiseControl 提供了许多有用的特性,有强大的用户社区,极具扩展性。与本文中评估的其他工具相比,有些开发人员觉得 CruiseControl 不太容易使用。而另一方面,有些开发人员则发现用 XML 脚本进行修改提供了更好的控制。
回页首
Luntbuild
从面市年头上说,Luntbuild 位于 Continuum 和 CruiseControl 之间。比起 Continuum 和 CruiseControl,Luntbuild 的目标是为并行开发和用户管理之类的事情提供支持的构建管理服务器。它的整个配置是通过 Web 应用程序管理的,所以没有配置文件需要处理。它也有商业版可以使用,叫作 QuickBuild,商业版中包含用户支持。
Jetty 不再必需
Luntbuild 提供了几种安装方式。您可能会发现最简单的方式是通过 GUI 安装。用 Web 应用程序配置和管理 Luntbuild;所以,需要确保正在运行一个能够处理 JSP 的 Web 服务器,像 Tomcat 或 Jetty。
版本控制轮询
Luntbuild 提供了对八种不同版本控制系统的支持,例如 CVS、Subversion、ClearCase 和 Perforce。图 4 演示了 Luntbuild 被设置成轮询 Subversion:
图 4. Luntbuild 轮询 Subversion 存储库
执行构建
Luntbuild 支持五种不同的构建平台,包括 Ant、Maven、Maven2、命令行和 rake (用来构建 Ruby 应用程序)。图 5 显示了 Ant 构建器的配置页面:
图 5. 用 Luntbuild 执行 Ant 脚本
构建安排
通过使用 Luntbuild 中的 Schedule 标签(如图 6 所示),可以设置 Luntbuild 多久轮询一次版本控制系统来获得修改。在这个标签上,还可以指定分配给每个构建的唯一构建标号。
图 6. 在 Luntbuild 中安排构建
在 Luntbuild 中发布结果
配置了项目、版本控制系统适配器、构建和计划程序之后,就可以指定用户接收反馈的方式了。但是,Luntbuild 只内置了对电子邮件和即时消息的支持。另外,可以从 Luntbuild 的主页监视构建,如图 7 所示:
图 7. 从 Luntbuild Web 应用程序监视构建
Luntbuild 提供了一整套强大的功能,包括管理项目依赖项和大量的版本控制系统适配器。我认为工作流和用户界面可以简化,因为需要许多步骤来设置和配置工具。
回页首
CI 记分卡
在不理解具体需求的情况下,就推荐哪个工具合适是非常冒失的。每个服务器都有许多优秀的特性,而且就像我在开始时所提到的,仅仅因为某个 CI 服务器最适合某人,并不意味着它必然满足您的需求。
如果寻找的是易于使用的工具,请选择 Continuum。如果扩展性、灵活性和繁荣的用户社区对您很重要,请使用 CruiseControl。如果需要 Web 管理和扩展的用户支持选项,请考虑 Luntbuild。围绕这些服务器已经形成了开发“生态”系统,所以如果遗漏了某个特性,一般都会找到适合需求的扩展。
在表 2 中,是我根据自己的使用经验为所考察的每个 CI 服务器总结的特性、可靠性、寿命、目标环境和易用性这五个核心方面:
表 2. CI 服务器五个核心方面
特性
可靠性
寿命
目标环境
易用性
Continuum |
支持 Ant、Maven1 和 Maven2,以及 shell。
使用 XML-RPC 和 SOAP 的远程管理能力;支持 Maven2;用户群;期待未来有附加的报告和反馈机制——不需要修改代码。 |
在 2005 年发布。期待通过它与 Apache 的关系,得到 Continuum 的更多消息。 |
通过 Apache Maven 的良好用户社区支持产品在市场上仍很新。 |
Linux、Mac OS X、Solaris 和 Win32。 |
优秀的易用性和安装。 |
CruiseControl |
许多版本控制集成和扩展性。通过 JMX 控制的远程访问。多种反馈机制,包括 RSS、X10、Jabber 以及其他。 |
在 2001 年发布。在三个服务器中,CruiseControl 在开发中应用得最多。 |
繁荣的用户社区;每个迹象都表示 CruiseControl 还会存在一段时间。 |
Windows 和 Unix;任何能运行 Java JVM 的平台。 |
易于安装。有些人宁愿不修改 XML 配置文件。 |
Luntbuild |
项目依赖项、标号、安全性组和并行开发。 |
在 2004 年发布。Luntbuild 提供扩展的用户支持选项。 |
用户社区不如 CruiseControl 活跃。 |
能够运行 JVM 和 servlet 容器的系统。 |
易于安装,但用户界面/工作流需要大大改进。基于 Web 的配置(不需要修改配置文件)。 |
我在本文中只评估了三个服务器;还有许多服务器可能更适合您的需求。但是既然您理解了如何挑选 CI 服务器,那么选择工作就应当很容易了。请继续关注下个月的文章,我将介绍在开发项目中经常会遇到的构建问题。
分享到:
相关推荐
perl516-perl-Locale-Maketext-1.22-19.el6.centos.alt.noarch.rpm
MATLAB仿真平台下的含碳捕集与垃圾焚烧虚拟电厂的协同优化调度策略研究:电转气技术下的能源利用与需求响应管理,MATLAB代码:计及电转气协同的含碳捕集与垃圾焚烧电厂优化调度 关键词:碳捕集 电厂 需求响应 优化调度 电转气协同调度 参考文档:《计及电转气协同的含碳捕集与垃圾焚烧电厂优化调度》完全复现 仿真平台:MATLAB+CPLEX 主要内容:代码主要做的是一个计及电转气协同的含碳捕集与垃圾焚烧电厂优化调度问题,基本调度框架是碳捕集电厂–电转气–燃气机组协同利用框架,碳捕集的 CO2 可作为电转气原料, 生成的天然气则供应给燃气机组; 并通过联合调度将碳捕集能耗和烟气处理能耗进行负荷转移以平抑可再生能源波动,使得风电 光伏实现间接可调度而被灵活利用,代码采用的是非智能算法求解,因为本文问题复杂智能算法难以求解,故使用的是yalmip+cplex求解器完成求解 这段代码是一个关于电转气协同的含碳捕集与垃圾焚烧电厂优化调度的程序。下面我将对程序进行详细分析。 首先,程序开始时进行了一些初始化的操作,包括清空命令窗口、清除变量和关闭所有图形窗口。 然后,定义了一系列的参数,这
shp格式,可直接导入arcgis使用
1、文件内容:snappy-1.1.0-3.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/snappy-1.1.0-3.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
perl516-perl-libs-5.16.3-19.el6.centos.alt.x86_64.rpm
1、文件内容:si-units-0.6.5-1.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/si-units-0.6.5-1.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
1、文件内容:svrcore-devel-4.1.3-2.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/svrcore-devel-4.1.3-2.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
宠物管理系统(源码+数据库+论文+ppt)java开发ssm框架javaweb,可做计算机毕业设计或课程设计 【功能需求】 整个网上宠物管理系统的设计与实现,主要实现的功能有以下几点: (1)前台用户:首页、宠物用品、宠物商店、宠物领养、宠物挂失、论坛信息、宠物资讯、个人中心、后台管理、购物车、客服咨询 (2)管理员:首页、个人中心、宠物分类管理、商品分类管理、宠物用品管理、宠物商店管理、宠物领养管理、用户管理、宠物寄存管理、用户领养管理、宠物挂失管理、论坛管理、管理员管理、系统管理、订单管理等功能; 【环境需要】 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.数据库:MySql 5.7/8.0等版本均可; 【购买须知】 本源码项目经过严格的调试,项目已确保无误,可直接用于课程实训或毕业设计提交。里面都有配套的运行环境软件,讲解视频,部署视频教程,一应俱全,可以自己按照教程导入运行。附有论文参考,使学习者能够快速掌握系统设计和实现的核心技术。
## 功能特点 1. 数据导入 - 支持Excel文件 - 支持CSV文件 - 数据预览 - 自动识别列 2. 图表类型 - 折线图 - 柱状图 - 饼图 - 散点图 - 箱线图 - 热力图 3. 图表设置 - 自定义标题 - 主题选择 - 轴标签设置 - 样式调整 4. 其他功能 - 实时预览 - 高清导出 - 多种格式 - 简单操作
perl516-perl-DBI-1.630-4.el6.centos.alt.x86_64.rpm
1、文件内容:strace-4.24-7.el7_9.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/strace-4.24-7.el7_9.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
1、文件内容:sos-3.9-5.el7.centos.12.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/sos-3.9-5.el7.centos.12.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
1、文件内容:srp_daemon-22.4-6.el7_9.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/srp_daemon-22.4-6.el7_9.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
1、文件内容:supermin5-devel-5.1.19-1.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/supermin5-devel-5.1.19-1.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
找到image文件扫一扫获取授权
一个将 Ollama 与 Flask 框架结合的 Python 源码,创建一个 Web 服务,用户可以通过浏览器或其他工具向该服务发送请求,调用 Ollama 模型生成文本。
perl516-perl-DateTime-1.06-3.el6.centos.alt.x86_64.rpm
内容概要:本文档详细介绍了如何在不同操作系统(Windows、macOS 和 Linux)上安装 PyCharm这一集成开发环境(IDE)。文档不仅讲解了具体的下载渠道以及步骤指引——涵盖社区版和专业版的选择,而且还引导用户进行首次配置,包括外观定制、键盘布局选定以及必要的组件启用,并指出在首次使用的各个阶段可能会遇到的关键事项,像是授权激活。此外,也提到了在启动过程中,针对不同平台的一些特定注意事项,例如在 Mac 中的安全性和隐私设置、Linux 下基于命令行的解压缩与启动方法。 适合人群:初次接触 Python 编程或有意向使用 PyCharm 提高生产力的程序员,尤其是对 PyCharm 不太熟悉的技术新手。 使用场景及目标:为希望使用 PyCharm 开发 Python程序的学生或专业人士提供详尽的操作指南,使其能够顺利完成安装,并熟悉 IDE 的基本特性及高级特性的初步认识,从而快速着手实际项目的开发。 阅读建议:用户可以按自己的操作系统直接跳转相关章节,逐步依照文档步骤来进行安装与配置。同时关注每段文字末提到的独特提醒项以保证顺利地使用 IDE 进行编码工作。对于计划长期使用 PyCharm 的用户来说,还可以探索更多高级插件以满足自身开发需求。
perl516-perl-DateTime-TimeZone-1.63-5.el6.centos.alt.noarch.rpm
全新前端UI界面,多种前端交互特效让页面不再单调,进群页面群成员数,群成员头像名称,每次刷新页面随机更新不重复,最下面评论和点赞也是如此随机刷新不重复 进群页面简介,群聊名称,群内展示,常见问题后台一键开关方便控制,付费进群系统后台自定义你的内容,底部显示你所设置的进群金额,也可以修改付费获取某些资源,搭建者自己集思广益,搭建的知识工具里面的内容才是内核,运营起来才是王道