Hudson plugins 插件开发基础
by Justin
1. 关于Hudson 插件的开发环境的搭建
Hudson 官方的说法是插件的开发必须依赖Maven2 和JDK6.0 或者更高版本。关于Maven 相关不会在这里详细说明。
ok ,首先方便起见,我们需要配置下我们的Maven ,设置以下内容到你的settings.xml 文件(在你的.m2 文件夹)当中去。
尝试在你的workspace 里创建一个新的插件工程(如果你没有做上面那个步骤,你需要输入的可不是hpi :create 那么简单……):
继续我们的创建工作,按照提示输入必要的一些项目配置信息:
现在你会发现你当前的workspace 里面已经生成了插件的基本框架,当然只包含一个maven 的项目配置信息文件pom.xml 和src 代码文件夹。接下来要做的事情是把你的Maven 工程导入到你的IDE 里面去,eclipse 已经提供了完善的Maven 插件,所以你可以直接导入Maven 项目,当然如果没有安装Maven 插件,那也没有关系,到你的pom.xml 层去尝试执行mvn eclipse:eclipse 吧,Maven 当然支持生成eclipse 的项目架构。
需要注意的点A :hudson 官方提及了建议使用eclipse 3.3 及以后的版本,似乎是已知的3.2 版本存在未解决的bug 导致的。
需要注意的点B :在导入eclipse 项目或者第一次打包项目的时候,会花费一段时间来下载Maven 配置的依赖项。
在这一节里还需要留意的是几个相关的命令:
mvn package -- 完成代码开发之后执行,按照pom.xml 中的配置信息将会打包为hpi 格式的插件文件,这个就是你最终可以拿来上传给你的hudson 平台的玩意
mvn hpi:run -- 在本地的Jetty 中运行你的hudson 插件,调试专用,当然可以使用Debug 模式,执行之后,在本地访问 http://localhost:8080/ 即可见(注意不要占用8080 端口)
2. 关于hudson 插件的结构
主要的结构包含四块内容:
pom.xml --Maven 项目配置信息,包括了项目结构,依赖和命名等
src/main/java --Java 代码
src/main/resources -- 在hudson 平台上的页面显示内容,使用的Jelly ,标签有点诡异
src/main/webapp -- 需要的一些静态资源包括图标图片页面等等等
完整的hudson 项目导入之后在eclipse 中的目录结构:
其中的HelloWorldBuilder.java 就是Maven 帮助我们生成的一份示例插件类,通过对这个文件的分析我们可以了解到一些插件类的工作方式。Hudson 通过判断你要实现的插件类的扩展方式来决定你的插件的工作方式,是在build 任务之前去做准备数据的工作,还是在build 过程中进行相应的配置,或者在每次运行完成后负责收集数据,不同的扩展方式在hudson 的工作中的切入点不一样,官方提供了相当丰富的扩展点,具体可以参考 http://wiki.hudson-ci.org/display/HUDSON/Extension+points ,这里的HelloWorldBuilder 扩展自Builder 。
关于扩展点的实现,不同的扩展点提供了对应的方法,比如Builder 扩展点提供了perform 方法,而WrapperBuilder 则是提供了setUp 方法。
关于数据绑定的方法,通过在构造方法前加标签@DataBoundConstructor ,将hudson 插件配置页面的数据传递进来。
关于页面的交互,通过内部静态类DescriptorImpl 来实现页面的显示和数据验证的工作
在resources 中提供了一个以完整的包名加类名命名的资源包,其中包含的config.jelly 和global.jelly 文件需要注意下。Hudson 使用jelly 来拼装页面,关于jelly 的相关资料找了一圈,信息量很少,hudson 官方提供一些资料 http://wiki.hudson-ci.org/display/HUDSON/Basic+guide+to+Jelly+usage+in+Hudson 。
config.jelly 是配置的当插件被选中时提供给用户交互的页面内容,注意页面的表单需要与你的处理类中的参数相对应同名。
如果你愿意提供下帮助的信息,ok ,在这儿直接写个命名为help-*.html 就行。
其实resources 路径下面还有一个index.jelly ,配置的是插件在hudson 的插件列表中的说明信息。插件名则可以命名在你的pom.xml 中,标签就是name 。
3. 关于hudson 插件开发的相关资料
官方wiki : http://wiki.hudson-ci.org/