Jenkins插件实际上是一个按照一定规则组织的jar包,其结构如下:
xxx.hpi
+- META-INF
| +-MANIFEST.MF
+- WEB-INF
| +- classes
| +- index.jelly
| +- XXXX.class
| +- lib
+- (static resources)
说明:
Jenkins插件的开发,使用maven来进行项目的管理和构建。如下罗列了其中需要的步骤。
Jenkins插件开发,需要JDK和Maven环境。下面以windows下的环境配置为例说明。
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;
M2_HOME = D:\maven
M2 = %M2_HOME%\bin
MAVEN_OPTS = -Xms256m -Xmx512m
CLASSPATH = ...;%M2%
PATH = ...;%M2%
可以通过mvn --version
,查看maven是否配置成功。
在~/.m2/settings.xml中,或者/maven/conf/settings.xml中,配置如下的Jenkins库依赖:
org.jenkins-ci.tools
jenkins
true
repo.jenkins-ci.org
http://repo.jenkins-ci.org/public/
repo.jenkins-ci.org
http://repo.jenkins-ci.org/public/
repo.jenkins-ci.org
http://repo.jenkins-ci.org/public/
m.g.o-public
配置好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
。我们需要手工修改成自己需要的内容。
使用 hpi:create生成的文件结构如下:
+- src
| +- main
| | +- java
| | | +- groupId.HelloWorldBuilder.java
| | +- resources
| | | +- groupId.HelloWorldBuilder
| | | | +- config.jelly
| | | | +- help-name.html
| | | +- index.jelly
Jenkins定义了一些扩展点(Extension Points),这些扩展点是接口或者抽象类。你可以根据自己的需要来修改文件的名字和扩展点。我们使用命令生成的框架程序中,HelloWorldBuilder继承了Builder。
数据的绑定:
//--HelloWorldBuilder.java--
@DataBoundConstructor
public HelloWorldBuilder(String name) {
this.name = name;
}
首先,在config.jelly中包含需要传入的参数配置信息的文本框,field为name,这样可以在Jenkins中进行配置,然后通过DataBoundConstructor的方式,传到类中。
Jenkins插件任务的执行
@Override
public boolean perform(AbstractBuild build, Launcher launcher, BuildListener listener) {
// This is where you 'build' the project.
// This also shows how you can consult the global configuration of the builder
listener.getLogger().println("Hello, "+name+"!");
return true;
}
根据注释可以了解:该处是你在Job进行构建时进行操作的地方,并且这里可以根据你在配置中的设置执行你需要的工作。通常,根据需要修改perform函数即可。
传入数据的检查
public FormValidation doCheckName(@QueryParameter String value)
throws IOException, ServletException {
if (value.length() == 0)
return FormValidation.error("Please set a name");
if (value.length() < 4)
return FormValidation.warning("Isn't the name too short?");
return FormValidation.ok();
}
在该函数中,实现在配置页面中填写内容时,进行校验的过程。如函数所述,当填入内容为空时,提示:Please set a name。你可以根据你的需要进行逻辑的控制。
为了便于在编辑器中进行修改,我们需要将生成的maven代码转化为eclipse工程,使用的命令如下:
mvn eclipse:eclipse
或者
mvn -DdownloadSources=true -DdownloadJavadocs=true -DoutputDirectory=target/eclipse-classes eclipse:eclipse
第二条较长的命令中,参数是可选的。
使用如下命令可以生成./target/pluginname.hpi
:
mvn install
或者
mvn package
其中mvn install 生成hpi文件,并放置到本地maven仓库中,mvn package只进行打包操作。
maven中使用.hpl(hudson plugin link)
格式来进行插件的调试。hpl文件中只包含一个链接,链接到类似META-INF/MANIFEST.MF
的说明文件../path/to/your/plugin/workspace/manifest-debug.mf
。该文件其中额外定义了一些属性来指定文件目录位置,这样资源的修改可以立即生效(需要配置stapler.jelly.noCache=true),不需要重新打包安装。
在maven中可以使用命令:
mvn hpi:hpl -DhudsonHome=/...
在调试通过后,可以使用.hpi文件来启动jenkins,查看结果,命令如下:
mvn hpi:run -DhudsonHome=/...
说明:-DhudsonHome可以不选,默认Jenkins安装到工程的./target目录中。