开始第一个Jenkins Plugin
一 Jenkins插件的结构
Jenkins插件实际上是一个按照一定规则组织的jar包,其结构如下:
1 | xxx.hpi |
说明:
- 1.插件的后缀为”.hpi”,文件名(xxx部分)是插件的简写名字,用来区分插件。
- 2.如上图结构所示,它与war包类似,只是缺少web.xml。
- 3.MANIFEST.MF包含一些入口的配置信息。其中有继承自Jenkins插件的类,用作实例化的入口。类的全名,用作我们去区分其他插件。
- 4.WEB-INF/classes 用来包含插件需要的.class,jelly页面等内容。它们可以封装成jar包放到WEB-INF/lib下面
- 5.WEB-INF/lib 包含插件中需要的.jar文件
- 6.插件需要的静态文件如图片,HTML,css样式文件,JS文件等可以放到文件的根目录下面。
二 Jenkins-Plugins的开发
Jenkins插件的开发,使用maven来进行项目的管理和构建。如下罗列了其中需要的步骤。
2.1 Jenkins插件开发时的环境配置
Jenkins插件开发,需要JDK和Maven环境。下面以windows下的环境配置为例说明。
2.1.1 JDK配置
JDK的版本要求在1.6以上,需要在配置文件中配置JDK的变量:
JAVA_HOME = C:\Program Files (x86)\Java\jdk1.6.0_38
CLASSPATH = ...;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
PATH = ...;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
2.1.2 Maven的配置
M2_HOME = D:\maven
M2 = %M2_HOME%\bin
MAVEN_OPTS = -Xms256m -Xmx512m
CLASSPATH = ...;%M2%
PATH = ...;%M2%
可以通过mvn --version
,查看maven是否配置成功。
2.1.3 Maven开发环境的配置
在~/.m2/settings.xml中,或者/maven/conf/settings.xml中,配置如下的Jenkins库依赖:
1 | <settings> |
2.2 生成插件的框架程序
配置好maven后,即可使用maven命令建立插件的框架,并且命令行会提示你输入groupId和artifactId:
mvn hpi:create
Enter the groupId of your plugin: com.baidu.ite.hudson
Enter the artifactId of your plugin: samplePlugin
这样会建立一个工程,名字为samplePlugin
,包路径com.baidu.ite.hudson
。
或者使用如下的命令:
mvn -U org.jenkins-ci.tools:maven-hpi-plugin:create -DgroupId={your.gound.id} -DartifactId={your.plugin.id}
说明:
1,-u代表jenkins需要更新自己所有的插件内容。
2,jenkins中提供的archetype-resources,文件的名字为HelloWorldBuilder.java
。我们需要手工修改成自己需要的内容。
2.2.1 代码结构
使用 hpi:create生成的文件结构如下:
1 | +- src |
Jenkins定义了一些扩展点(Extension Points),这些扩展点是接口或者抽象类。你可以根据自己的需要来修改文件的名字和扩展点。我们使用命令生成的框架程序中,HelloWorldBuilder继承了Builder。
2.2.2 代码的解释
数据的绑定:
1 | <!--config.jelly--> |
1 | //--HelloWorldBuilder.java-- |
首先,在config.jelly中包含需要传入的参数配置信息的文本框,field为name,这样可以在Jenkins中进行配置,然后通过DataBoundConstructor的方式,传到类中。
Jenkins插件任务的执行
1 |
|
根据注释可以了解:该处是你在Job进行构建时进行操作的地方,并且这里可以根据你在配置中的设置执行你需要的工作。通常,根据需要修改perform函数即可。
传入数据的检查
1 | public FormValidation doCheckName( String value) |
在该函数中,实现在配置页面中填写内容时,进行校验的过程。如函数所述,当填入内容为空时,提示:Please set a name。你可以根据你的需要进行逻辑的控制。
2.3 转换为eclipse工程
为了便于在编辑器中进行修改,我们需要将生成的maven代码转化为eclipse工程,使用的命令如下:
mvn eclipse:eclipse
或者 mvn -DdownloadSources=true -DdownloadJavadocs=true -DoutputDirectory=target/eclipse-classes eclipse:eclipse
第二条较长的命令中,参数是可选的。
2.4 生成hpi文件
使用如下命令可以生成./target/pluginname.hpi
:
mvn install
或者mvn package
其中mvn install 生成hpi文件,并放置到本地maven仓库中,mvn package只进行打包操作。
2.5 使用.hpl进行调试
maven中使用.hpl(hudson plugin link)
格式来进行插件的调试。hpl文件中只包含一个链接,链接到类似META-INF/MANIFEST.MF
的说明文件../path/to/your/plugin/workspace/manifest-debug.mf
。该文件其中额外定义了一些属性来指定文件目录位置,这样资源的修改可以立即生效(需要配置stapler.jelly.noCache=true),不需要重新打包安装。
在maven中可以使用命令:
1 | mvn hpi:hpl -DhudsonHome=/... |
2.6 使用.hpi进行测试
在调试通过后,可以使用.hpi文件来启动jenkins,查看结果,命令如下:
1 | mvn hpi:run -DhudsonHome=/... |
说明:-DhudsonHome可以不选,默认Jenkins安装到工程的./target目录中。
致谢:lizejun