46、Java 持续集成工具的深入剖析

Java 持续集成工具的深入剖析

1. CruiseControl 工具介绍

1.1 构建日志报告

CruiseControl 的报告部分是一个 Web 应用程序,它提供了一个简洁的界面来浏览构建日志。其发行版中包含一个 WAR 文件,以下是配置该 Web 应用程序的步骤:
1. 将 WAR 文件安装到 Web 应用程序部署目录,启动 Web 应用程序,它会将 WAR 文件展开为实际的物理文件。
2. 编辑 WEB - INF/web.xml 文件,指向存储 CruiseControl 日志的位置,然后重启 Web 服务器使更改生效。
3. 通过访问 Web 服务器上的 /buildservlet/cruise.jsp 来测试安装情况。若尚未使用 CruiseControl 进行初始构建,首次访问可能会看到文件缺失的错误提示。

1.2 电子邮件通知和构建标签

当构建失败时,CruiseControl 可以直接向最后提交文件到仓库的用户发送电子邮件。由于仓库用户名和电子邮件地址不一定有直接映射关系,所以它提供了映射功能,还支持电子邮件地址别名,方便将构建失败通知发送给特定群体,如 “开发人员”。

构建成功后,构建标签会递增。默认的递增器只是在最后一个标签的最后一个数字上加 1,也可以在 cruisecontrol.properties 中配置自定义的构建标签递增器,以使用自己偏好的构建标签方案。

1.3 CruiseControl 总结

CruiseControl 目前是 Java 持续集成工具中的佼佼者,为项目工具集增添了不错的功能。但其配置较为复杂,尽管文档比较完善,但运行起来仍有难度。不过,一旦配置并运行起来,成果将物有所值。使用它可以促使开发者养成更好的 Ant 使用习惯,确保为输出文件定义属性,从而实现可覆盖性。

1.4 技巧和窍门

  • 建议使用 Jikes 代替 javac,因为 Jikes 速度更快且内存泄漏更少。
  • 如果使用 javac 编译器或其他大型 Java 程序,设置 fork = “true”。
  • 配备支持 SMS 消息的手机并设置电子邮件别名,这样在出现问题或恢复正常时可以收到通知。

1.5 优缺点分析

缺点
  • 需要进行 web.xml 配置,对于不将 WAR 文件展开为物理文件的 Web 容器来说会有问题,可能需要手动替换 WAR 文件内的 web.xml。
  • 需要对构建文件进行一定修改,并且需要了解 Ant 针对特定仓库的可选 SCM 任务。
  • auxlogfiles 功能不能递归处理 XML 文件。
  • 版本标签与 SCM 未集成。
  • 多个项目需要配置多个运行器,可能还需要为每个项目单独配置 Web 应用程序。
优点
  • 一旦设置并运行起来,非常可靠。
  • 报告做得很好,美观且易于定制,可将任何 XML 文件纳入结果,扩展性强。
  • 版本标签递增可自定义。
  • 能直接向导致构建失败的开发者发送电子邮件。
  • 电子邮件设置高度可配置,支持组别名。

2. Anthill 工具介绍

2.1 让 Anthill 运行起来

安装 Anthill
  1. 从 http://www.urbancode.com 下载最新的 Anthill 二进制发行版。
  2. 将下载的存档文件解压到安装目录(如 c:\tools\anthill)。
  3. 在安装目录下创建一个发布目录(未来版本可能不需要此步骤)。
  4. 将 anthill.war 从安装的 dist 目录复制到 Web 应用程序服务器部署目录。
  5. 启动 Web 应用程序服务器。
  6. 使用 Web 浏览器访问 Anthill Web 应用程序的根目录:http://localhost:8080/anthill/ 。
  7. 在项目的根目录创建一个 anthill.version 文件,该文件初始包含项目的起始版本号,如 1.1.1,并将其提交到源代码仓库。
让 Anthill 与 Ant 1.5 配合使用

Anthill 自带 Ant 1.3 和 Ant 1.4,但如果构建需要 Ant 1.5 的功能,可将 Ant 1.5 安装到安装目录的 lib/ant1.5 目录下,并在 Web 管理的 Anthill Properties 设置中,将 anthill.ant.home 设置为 lib/ant1.5。

2.2 Anthill 的工作原理

Anthill 在其安装目录中维护项目和调度配置信息。Web 应用程序负责配置管理、构建运行以及展示生成的结果。在运行构建之前,Anthill 会自行处理与 SCM 仓库的通信。如果有新文件,就会触发构建。

每个 Anthill 配置的项目都与一个调度计划相关联,可将调度计划定义为一个时间间隔(以分钟为单位)。指定间隔为 0 可阻止自动构建,默认配置为停止调度。也可以通过 Web 界面手动运行构建。

构建成功后,版本文件(如 anthill.version)中存储的版本号会递增,并且仓库会使用该值进行标记。Anthill 提供了锁定该文件的功能,以确保没有竞态条件,但在某些环境中锁定功能可能无法正常工作,可以在 Anthill 配置中禁用该功能。

2.3 Anthill 总结

缺点
  • 二级发布构建文件似乎不必要且容易引起混淆,希望 Anthill 能在项目级别配置中指定引用要发布的构建工件的文件和目录的 Ant 属性。
  • 构建状态展示需要大幅改进,希望为每个项目提供一个包含构建结果、单元测试结果以及指向其他构建工件(如文档和发行版)链接的摘要页面。
优点
  • 安装和配置非常简单直接。
  • 支持多个项目。
  • 调度器可以在单个 Anthill Web 应用程序实例中处理多个项目。
  • 对构建文件的影响较小。
  • Anthill 在构建文件之外处理 SCM 获取,简化了配置,但目前仅支持 CVS 仓库。
  • 版本标签方案可自定义。
  • 能自动对仓库进行版本标记。
  • 可以手动启动构建,不受调度计划的限制。

3. Gump 工具介绍

3.1 安装和运行 Gump

Gump 的安装适合喜欢深入了解工具的用户,对于希望简单安装并快速运行的用户来说可能不太友好。以下是为 AntBook 项目设置 Gump 过程的步骤:
1. 使用 CVS 客户端登录并检出 jakarta - alexandria 模块到运行 Gump 进程的机器上:

cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic login
password: anoncvs
cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic checkout jakarta - alexandria
  1. 通过阅读 http://jakarta.apache.org/gump 的文档了解 Gump 的配置细节,配置文件位于 jakarta - alexandria/proposal/gump 目录及其子目录下。
  2. 在 Gump 主目录中配置一个工作区 XML 文件,文件名应为 hostname.xml,其中 hostname 是机器的名称,该文件用于配置特定于平台和绝对路径的信息。

以下是工作区配置示例:

<?xml version="1.0" ?>
<workspace basedir="c:\temp\gump" pkgdir="C:\tools\gump" version="0.3">
  <property name="build.sysclasspath" value="first"/>
  <profile href="profile/erik.xml"/>

  <project name="ant" home="c:\AntBook\jakarta - ant - 1.5">
    <jar name="lib/ant.jar"/>
    <jar name="lib/optional.jar"/>
    <jar name="lib/junit.jar"/>
    <jar name="lib/log4j.jar"/>
  </project>
</workspace>

工作区定义告诉构建过程设置特殊的 build.sysclasspath 属性,使系统类路径优先于构建内部使用的所有路径。

以下是 profile 文件 erik.xml 的示例:

<profile name="erik">
  <module href="project/antbook.xml"/>
  <module href="project/xdoclet.xml"/>
  <repository href="repository/eiger.xml"/>
  <repository href="repository/sourceforge.xml"/>
</profile>

从 Gump 主目录的命令提示符下,根据平台执行 gen.bat 或 gen.sh 生成脚本,这些脚本会根据工作区配置文件和其他所需配置文件生成特定于平台和设置的脚本,脚本会生成到工作区定义中指定的 basedir 目录。生成过程会创建 update.bat/.sh 文件和 build.bat/.sh 文件,先执行更新脚本从仓库更新项目的本地副本,再执行构建脚本按依赖顺序构建所有项目,可通过循环任务实现这些步骤的自动化。

3.2 Gump 的工作原理

Gump 在建模复杂构建过程方面表现出色,它将项目、模块、仓库、配置文件和工作区的概念分离到单独的 XML 配置文件中,方便重用。以下是这些概念的详细定义:
| Gump 术语 | 定义 |
| — | — |
| 项目(project) | 表示可构建的项目或可安装的包,如固定的外部库,项目定义会列出其导出的 JAR 文件,供依赖项目使用。 |
| 模块(module) | 存储在单个仓库中的一组项目。 |
| 仓库(repository) | 定义访问仓库(如 SourceForge、Jakarta 或自己的 CVS 服务器)所需的 CVS 信息。 |
| 配置文件(profile) | 定义一组项目和仓库。 |
| 工作区(workspace) | 全局控制配置,定义要构建的项目,可直接定义或通过配置文件定义,这里保存特定于平台和路径的信息。 |

综上所述,CruiseControl、Anthill 和 Gump 这三款 Java 持续集成工具各有优缺点,开发者可以根据项目的具体需求和实际情况选择适合的工具,以提升项目的开发效率和质量。

4. 工具对比分析

4.1 安装与配置复杂度

工具名称 安装难度 配置复杂度
CruiseControl 较难,需要对 WAR 文件部署和 web.xml 进行配置,且配置过程容易出错 高,需要理解 Ant 的 SCM 任务,对构建文件进行修改
Anthill 简单直接,主要是文件的下载、解压和复制,以及少量配置 低,通过 Web 界面进行配置,操作相对简单
Gump 较难,需要使用 CVS 客户端进行模块检出,且配置文件较多 高,需要理解多个 XML 配置文件的含义和关系

从安装和配置复杂度来看,Anthill 是最容易上手的,适合初学者和对配置要求不高的项目。CruiseControl 和 Gump 则需要更多的技术知识和经验,适合有一定基础的开发者和复杂项目。

4.2 功能特性对比

工具名称 构建日志报告 电子邮件通知 版本标签管理 SCM 支持 扩展性
CruiseControl 提供美观且可定制的 Web 界面,可浏览构建日志 支持直接向开发者发送邮件,邮件设置可高度配置 版本标签递增可自定义 需要对构建文件进行修改以支持 SCM 可将任何 XML 文件纳入结果,扩展性强
Anthill 通过 Web 界面展示构建结果和项目构建工件 可设置邮件通知,支持组别名 版本标签方案可自定义,自动对仓库进行版本标记 目前仅支持 CVS 仓库,在构建文件外处理 SCM 获取 支持多个项目,调度器可处理多个项目
Gump 可生成项目的交叉引用信息、Javadocs 和 JAR 文件 文档未提及相关功能 文档未提及相关功能 支持多种 CVS 仓库,如 SourceForge、Jakarta 等 配置文件可重用,可自定义构建流程

在功能特性方面,每个工具都有其独特之处。CruiseControl 的报告功能和扩展性较好,适合对构建日志和扩展性有要求的项目。Anthill 的版本标签管理和 SCM 处理较为方便,适合对版本管理和 SCM 集成有需求的项目。Gump 则在建模复杂构建过程和支持多种仓库方面表现出色,适合大型开源项目和复杂的构建场景。

4.3 性能与稳定性

  • CruiseControl :一旦配置并运行起来,稳定性较高,但由于配置复杂,前期可能需要花费较多时间进行调试。
  • Anthill :安装和配置简单,运行稳定,对构建文件的影响较小,能快速投入使用。
  • Gump :在处理复杂构建过程时表现出色,但由于需要处理多个 XML 配置文件,可能会对性能产生一定影响。

5. 使用建议

5.1 小型项目

对于小型项目,建议选择 Anthill。其安装和配置简单,对构建文件的影响较小,能快速搭建持续集成环境。同时,它支持多个项目和可自定义的版本标签方案,能满足小型项目的基本需求。以下是使用 Anthill 的简单步骤:
1. 按照上述安装步骤下载、解压和部署 Anthill。
2. 配置 Anthill 与 Ant 1.5 配合使用(如果需要)。
3. 在 Web 界面进行项目配置,设置调度计划和版本标签。
4. 启动构建任务,查看构建结果。

5.2 中型项目

中型项目可以考虑使用 CruiseControl。它提供了强大的构建日志报告和电子邮件通知功能,能及时发现和解决构建问题。同时,其版本标签递增可自定义,扩展性强,能满足中型项目的多样化需求。使用 CruiseControl 的步骤如下:
1. 安装 WAR 文件并配置 Web 应用程序。
2. 编辑 WEB - INF/web.xml 文件,指向日志存储位置。
3. 对构建文件进行修改,以支持 SCM 任务。
4. 配置电子邮件通知和版本标签递增器。
5. 启动 CruiseControl,查看构建结果。

5.3 大型开源项目

大型开源项目推荐使用 Gump。它在建模复杂构建过程方面表现出色,能处理多个项目和仓库的依赖关系。同时,其配置文件可重用,能提高开发效率。使用 Gump 的步骤如下:
1. 使用 CVS 客户端检出 jakarta - alexandria 模块。
2. 阅读文档,了解 Gump 的配置细节。
3. 配置工作区 XML 文件和其他相关配置文件。
4. 生成脚本并执行更新和构建任务。
5. 实现任务自动化,定期进行构建。

6. 总结

Java 持续集成工具在现代软件开发中起着至关重要的作用。CruiseControl、Anthill 和 Gump 这三款工具各有优缺点,开发者应根据项目的规模、复杂度和具体需求选择合适的工具。小型项目可选择 Anthill 以快速搭建环境,中型项目可使用 CruiseControl 来提高构建质量和可扩展性,大型开源项目则推荐使用 Gump 来处理复杂的构建过程。通过合理选择和使用持续集成工具,开发者可以提高项目的开发效率、保证代码质量,并及时发现和解决问题。

mermaid 流程图:

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;

    A([选择项目类型]):::startend --> B{小型项目}:::decision
    B -->|是| C(选择 Anthill):::process
    B -->|否| D{中型项目}:::decision
    D -->|是| E(选择 CruiseControl):::process
    D -->|否| F(大型开源项目):::process
    F --> G(选择 Gump):::process
    C --> H(安装和配置 Anthill):::process
    E --> I(安装和配置 CruiseControl):::process
    G --> J(安装和配置 Gump):::process
    H --> K(启动构建任务):::process
    I --> K
    J --> K
    K --> L([查看构建结果]):::startend

这个流程图展示了根据项目类型选择合适的 Java 持续集成工具,并进行相应的安装、配置和构建的过程。通过这个流程图,开发者可以更直观地了解如何根据项目需求选择和使用工具。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值