提到 Jenkins,做测试工作的无论是小伙伴、大伙伴还是老司机都是比较熟悉的。网上大部分资料无非三种:Jenkins 简介、如何启动 Jenkins、如何安装和使用 Jenkins 插件。本文作为一个 jenkins 的进阶:教你如何开发一个 jenkins 插件。话不多说,让我们直接切入正题。如本文题目所示,我会以火线为例,逐步讲述一个 jenkins 插件从无到有的整个过程。有些细心的小伙伴可能就疑惑了,jenkins 我听说过,“火线” 又是个啥呢?由于本文主题是 Jenkins 插件,对于火线的介绍请戳官网介绍。http://magic.360.cn/ 也许你会有意外收获。
巧妇还难为无米之炊呢,更何况我们这些程序猿呢?来,先把今天的 “器” 备齐了以便我们之后的冲锋上阵,勇猛杀敌。
Maven3、JDK6.0 以上版本、Eclipse(选择自己使用的 IDE 就可以)
请将如下配置内容添加到您的 *.m2\settings.xml 配置文件中。
<settings>
<pluginGroups>
<pluginGroup>org.jenkins-ci.tools</pluginGroup>
</pluginGroups>
<profiles>
<!-- Give access to Jenkins plugins -->
<profile>
<id>jenkins</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
<repository>
<id>repo.jenkins-ci.org</id>
<url>https://repo.jenkins-ci.org/public/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>repo.jenkins-ci.org</id>
<url>https://repo.jenkins-ci.org/public/</url>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<mirrors>
<mirror>
<id>repo.jenkins-ci.org</id>
<url>https://repo.jenkins-ci.org/public/</url>
<mirrorOf>m.g.o-public</mirrorOf>
</mirror>
</mirrors>
</settings>
mvn -U org.jenkins-ci.tools:maven-hpi-plugin:create
运行中间需要输入你的 groupId 和 artifactId,如下图:
完成后会在当前目录下生成 FireLinePlugin 文件目录,此时此刻一个简单的 jenkins 插件模板就光荣诞生啦!!
以上准备工作完成后,即可动手操练起来,开发自己的 jenkins 插件。
Jenkins 使用了 Jelly 页面渲染技术,jelly 文件以.jelly 为后缀,在 hudson 中使用类全名的形式来查找模型类对应的 jelly 页面文件,例如名为 src/main/java/com/qihoo/fireline/FireLineBuilder.java 的类,其对应的页面文件应该存在于 src/main/resources/com/qihoo/fireline/FireLineBuilder/目录下。如下图:
resources 文件中的 config.jelly 文件为 job 配置的视图文件,如图:
global.jelly 文件为 jenkins 插件的系统全局配置视图文件,如图:
如果你的 Eclipse 开发环境未安装 Maven 插件,可以使用命令 mvn eclipse:eclipse 将 maven 项目转化成 eclipse 项目直接导入。若已安装 maven 插件,直接导入 maven 项目。使用 maven 命令创建插件会自动生成类文件 HelloWorldBuilder.java,此处我将类名更改成 FireLineBuilder。
本模板中使用了 jenkins 的 Builder 作为扩展点,Jenkins 中有多种不同扩展点,你也可以创建一个新的扩展点。
详情可参考:https://wiki.jenkins-ci.org/display/JENKINS/Extension+points
FireLineBuilder 类中通过@DataBoundConstructor注释来声明构造函数,构造函数参数与 config.jelly 配置文件中的字段一一对应。
在 Jenkins 中,job 每次执行编译时,都会执行 perform() 方法,可在此方法内实现自己的插件定义。方法中有四个参数:
java
public String getDisplayName() {
return "Execute FireLine";
}
显示如图:通过 DescriptorImpl 类中 FormValidation doCheckName(@QueryParameter String value) 方法可以对 *.jelly 配置中传递的参数进行基本的校验。
> set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8000,suspend=n
> mvn hpi:run
在浏览器中访问http://localhost:8080/Jenkins ,即可查看调试插件。更多干货,扫码关注 Qtest 公众号