写点什么

使用 Hudson 和 FindBugs 进行持续集成和代码检查

  • 2007-12-18
  • 本文字数:1038 字

    阅读完需:约 3 分钟

最近在 IBM developerWorks 发表的一篇文章中谈到了如何使用开源工具将构建过程中的持续集成(Continuous Integration,CI)和代码检查这两项任务自动化。它描述了如何安装和配置 Hudson ——一款由 java.net 社区开发的 CI 服务器,一旦检测到源码发生变化时,它就会从 Subversion 代码仓库中获取最新代码,并运行 Ant 构建脚本。

作者 Andrew Glover 将如下三项作为了典型 CI 环境设置的主要组件: - 一个使用构建工具(如 Apache Ant)的自动化构建过程。

  • CVS 或 Subversion 之类的源码仓库。
  • CI 服务器,如 Hudson。

Andrew 用了一个 java 应用为例,讲述了如何在 Hudson 服务器上配置 java 项目,从而运行自动化构建。他还展示了如何通过 Hudson 的插件扩展将类似于 FindBugs PMD 的代码分析和软件检查工具进行集成。

在 文章中,作者阐述了如何使用 Hudson 来捕获构建过程的执行时间和测试结果所反映的趋势。在每一次构建中,CI 服务器都会对 JUnit 结果的 XML 文件 进行解析,并生成一个趋势图,用于展示在相邻的两次构建之间,增加了多少个测试。同时,它还可显示出测试是否通过(蓝图表示通过,红图表示失败)。通过 PMD 或者 FindBugs 发现的代码冲突或是缺陷,都会在每一次构建后被记录下来,以供历史分析。 还可以为 Hudson 配置一个 SMTP 服务器,从而在构建失败时向整个项目团队发送邮件提醒。它还支持使用 RSS 作为提醒机制,开发团队可以通过 RSS feeds 来订阅项目的构建状态页面。

Hudson 同时支持 JUnit TestNG 这两种测试框架。它还可以与其它 SCM 工具(如 CVS, ClearCase Accurev )和构建工具(如 Maven Gant )进行集成。在 Hudson 网站上列出了所有的插件,我们可以看到,它可以和众多的开源或是商业的 SCM、代码覆盖和问题跟踪工具进行集成。

在 developerWorks 上的另外一篇有关 CI 话题的文章中,Paul Duvall 向读者展示了在建立 CI 环境时的一些最佳实践,并指出如何避免一些错误做法(他把它们称之为 CI 反模式)。这些最佳实践是:

  • 开发者应该频繁提交小段代码,而不是等上很长时间以后,一次性的提交很多变化;
  • 当构建失败时,CI 服务器应该立刻通知项目团队;
  • 应当使用类似 E-mail 或者 RSS 之类的反馈机制来与项目团队报告构建状态;
  • 构建状态反馈应该简洁,只应该包括与构建相关的信息;
  • 构建服务器应该有足够的硬件配置,从而进行更快的构建;
  • 项目团队应遵循“管道式构建”的原则来异步执行那些需要较长时间才能运行完的构建过程。

查看英文原文 Continuous Integration and Code Inspection with Hudson and FindBugs

2007-12-18 00:1811975
用户头像

发布了 197 篇内容, 共 64.1 次阅读, 收获喜欢 21 次。

关注

评论

发布
暂无评论
发现更多内容

PageHelper原理深度剖析(集成+源码)

阿Q说代码

ThreadLocal 分页 PageHelper 8月日更 mybatis的拦截器

打造数字人民币的大运应用场景

CECBC

多样数字人民币钱包来袭,阻力与动力并存

CECBC

从lowcode看下一代前端应用框架

百度Geek说

大前端 lowcode

云小课 | 详解华为云独享型负载均衡如何计费

华为云开发者联盟

负载均衡 华为云 弹性负载均衡 独享型ELB实例 独享型负载均衡

国产接口调试工具ApiPost中的内置变量

Proud lion

大前端 测试 后端 Postman 开发工具

Android模块化开发实践

vivo互联网技术

android 架构 开发 项目实战 模块

NameServer 核心原理解析

leonsh

RocketMQ 消息队列 NameServer

6种常用Bean拷贝工具一览

码农参上

8月日更 对象拷贝

聊聊 Linux 登陆提示信息 motd 文件

耳东@Erdong

Linux 8月日更 motd

iOS开发:Mac电脑Xcode里面添加导入真机调试包的步骤

三掌柜

8月日更 8月

智能运维系列直播间开讲啦,就在今天!

面试重灾区:请说说mybatis的一级缓存和二级缓存

小鲍侃java

8月日更

以区块链为基础 通证经济是下一代互联网的数字经济

CECBC

protocol buffer的高效编码方式

程序那些事

Java protobuf 程序那些事

区块链+物联网设备,能产生什么反应?

CECBC

使用mock.js给前端生成需要的数据

与风逐梦

大前端 后端 开发工具

Golang:再谈生产者消费者模型

Regan Yue

协程 Go 语言 8月日更

传统到敏捷的转型中,谁更适合做Scrum Master?

华为云开发者联盟

Scrum 敏捷 团队 项目经理 Scrum Master

Vue进阶(六十三):如何使浏览器打开时,默认的文档模式就是标准模式

No Silver Bullet

Vue 8月日更

Go- 函数参数和返回值

HelloBug

函数 参数 返回值 Go 语言

web技术分析| 一篇前端图像处理秘籍

anyRTC开发者

大前端 音视频 WebRTC web技术分享

KubeCube开源:魔方六面,降阶Kubernetes落地应用

网易数帆

开源 Kubernetes 容器 KubeCube

Java NIO在接口自动化中应用

FunTester

Java nio 接口测试 测试开发

一分钟学会使用ApiPost中的全局参数和目录参数

CodeNongXiaoW

大前端 测试 后端 接口工具

带你梳理Jetty自定义ProxyServlet实现反向代理服务

华为云开发者联盟

容器 k8s jetty Servlet引擎 ProxyServlet

带头撸抽奖系统,DDD + RPC 开发分布式架构!

小傅哥

DDD 小傅哥 架构设计 springboot 抽奖系统

后Kubernetes时代的虚拟机管理技术之kubevirt篇

谐云

虚拟机 #Kubernetes#

MySQL大版本间的区别

4ye

MySQL 后端 innodb 版本 8月日更

手撸二叉树之二叉树的坡度

HelloWorld杰少

8月日更

最小二乘法,了解一下?

华为云开发者联盟

数据 数据处理 计算 最小二乘法 数学工具

使用Hudson和FindBugs进行持续集成和代码检查_Java_Srini Penchikala_InfoQ精选文章