Hudson 插件编写
Hudson是一个开源的持续集成工具,由于其强大的扩展性(插件)而著名,允许用户定制build的各个step,steps如下:
<pluginGroups>…… <pluginGroup>org.jvnet.hudson.tools</pluginGroup>……</pluginGroups>加入这一行信息可以在我们使用Hudson的maven插件时使用缩略名(比如.使用hpi:create代替org.jvnet.hudson.tools:maven-hpi-plugin:1.23:create)?1.2 新建工程使用如下命令
mvn hpi:createhpi: 是Hudson Plug-in Interface的缩写,这是Hudson自己开发的用来进行插件开发的maven插件,就像大家经常用的mvn eclipse:eclipse中的前面一个eclipsecreate:这是Hudson HPI插件用来生成Hudson插件原型项目的goal关于mvn相关概念可以参考:http://trinea.iteye.com/blog/1290898
public static DescriptorImpl descriptor() { return Hudson.getInstance().getDescriptorByType(HelloWorldBuilder.DescriptorImpl.class); }以上代码中的HelloWorldBuilder为当前类名mvn package在target目录下生成了一个*.hpi和一个*.jar文件,见过hudson插件的都知道,hpi后缀为hudson插件文件。现在我们就可以将hpi文件添加到hudson中作为插件,不过不急,我们用命令自动运行
mvn hpi:run这个命令会启动jetty,并且将hudson作为一个web应用启动,启动hudson前安装当前的插件到hudson中当前项目根目录下的work文件夹作为hudson home,可以在其中找到用于存放插件的plugins文件夹
mvn hpi:run -Djetty.port=8090修改启动端口为8090
,下面介绍下代码2、插件中主要代码介绍
2.1 继承相应的扩展点extension Point
hpi中有个概念叫extension Point。就是说你要扩展哪方面。
由于mvn hpi:create默认扩展自扩展Builder这个扩展点,所以HelloWorldBuilder继承了Builder这个类。
其他扩展点会继承其他类,如post build action需要继承Notifier
?
2.2 实现perform方法
方法perform()是个很重要的方法,当插件运行的的时候这个方法会被调用。相应的业务逻辑也可以在这里实现。
?
2.3?继承Descriptor
新建DescriptorImpl类继承了BuildStepDescriptor<Builder>,BuildStepDescriptor继承自Descriptor。在Hudson 的官方说明文档里说Descriptor包含了一个配置实例的元数据。
打个比方,我们在工程配置那里对插件进行了配置,这样就相当于创建了一个插件的实例,这时候就需要一个类来存储插件的配置数据,这个类就是Descriptor。
?
其中的getDisplayName()表示在配置中插件展现的名字,如同上面1.5查看结果中我们看到的配置中build下拉框的Say hello world
?
3、debug调试
用mvn -Dhudson.maven.debugPort=5001 hpi:run启动jetty
或者修改maven启动参数
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=5001
具体见:http://wiki.hudson-ci.org/display/HUDSON/Debugging+native+Maven+jobs
?
更多参考如下:
http://wiki.hudson-ci.org/display/HUDSON/Extend+Hudson
http://wiki.eclipse.org/Hudson-ci/writing-first-hudson-plugin
http://wiki.hudson-ci.org/display/HUDSON/Plugin+tutorial
http://qa.taobao.com/?p=4925
http://drizzlewalk.blog.51cto.com/2203401/499586
1 楼 jackyneo 2011-12-26 本地调试的时候要确保端口没被调用,否则就悲剧了 2 楼 jackyneo 2011-12-26 最近来考虑自己写个插件。。。满足SCM和一帮人的要求,尼玛,又当开发又搞测试,一种又当爹又当妈的感觉。。。 3 楼 Trinea 2011-12-26 jackyneo 写道最近来考虑自己写个插件。。。满足SCM和一帮人的要求,尼玛,又当开发又搞测试,一种又当爹又当妈的感觉。。。