Jenkins 插件开发
搭建开发环境
为了能开发插件,开发环境需要安装 Maven 和 JDK 6.0 以上版本。
1、安装 JDK
打开 cmd, 输入 java –version
如下图,说明安装完成。
如果没安装,点击链接 http://jingyan.baidu.com/article/bea41d435bc695b4c41be648.html
图 1
2、安装 Maven
1. 下载 Maven http://maven.apache.org/download.html
如下图:
图 2
将安装包解压到任意地址,我的路径是 D:\apache-maven-3.0.5
新建环境变量 M2_HOME 指向 D:\apache-maven-3.0.5
在 path 添加路径%M2_HOME%\bin
打开 cmd 输入 mvn –v,
如下图:
图 3
1
安装成功。
给 eclipse 安装插件 m2eclipse。
1、 打开 eclipse
2、 Help-Install New Software 出现下图:
3、 点击 Add
图 4
图 5
在 name 输入 m2e
在 Location 输入 http://m2eclipse.sonatype.org/sites/m2e
4、 确定后出现下图:
5、 勾选 Maven Integration for Eclipse
6、 然后一直下一步直到安装完毕
图 6
2
7、 检查是否安装成功
(1) 点击 Help – about eclipse – installation details,看是否存在 Maven Integration
for Eclipse(Required),如下图:
(2) 再检查 eclipse 是否可以创建 Maven 项目了,File-New-Other
图 7
到此 Maven 安装完成了。
图 8
3、安装 jenkins
下载 jenkins 链接 http://jenkins-ci.org/
将 jenkins.war,拷贝到 D:\jenkins 下,打开 cmd,转到 D:\jenkins 目录下
然后运行 java –jar jenkins.war
最后出现 jenkins is fully up an running。说明安装成功。
访问 http://localhost:8080 界面如下图:
3
图 9
插件开发流程
1、设置环境
由于是使用 maven 进行开发,需要对%USERPROFILE%\.m2\settings.xml(USERPROFILE
为用户名路径如 C:\Documents and Settings 下的用户)文件添加以下内容:
org.jenkins-ci.tools
jenkins
true
repo.jenkins-ci.org
http://repo.jenkins-ci.org/public/
4
repo.jenkins-ci.org
http://repo.jenkins-ci.org/public/
repo.jenkins-ci.org
http://repo.jenkins-ci.org/public/
m.g.o-public
这将可以使用缩短的命令来执行运行。
2、生成新的插件
开发新的插件,执行以下命令:
mvn –U hpi:create
将会提示出现需要输入 groupid 和 artifactid,如下:
groupid:com.jysong.jenkins
artifactid: newplugin
这样便生成了新的插件,会生成一个简单的例子,同时在当前目录下生成新的文件夹
newplugin,然后再执行下面的命令。
cd newplugin
mvn package
使用这个命令将工程进行打包,不过由于版本的不同可能会出现错误。如果出现错误参
考下面的源代码部分进行修改。
在第一次执行命令时会下载很多的文件,需要耐心的等待。
3、编译插件
mvn install
运行此命令将会生成文件 ./target/newplugin.hpi。可以把它加载到 jenkins 中。并且
将./target/newplugin.hpi、pom.xml、./target/newplugin.jar 这几个文件安装到 maven 的
本地仓库中,就可以被其他的工程调用了。
也可以使用 mvn package,只是进行打包生成所需文件,并不安装到本地仓库中。
4、为 IDE 设置开发环境
使用 eclipse 进行代码开发。
5
mvn -DdownloadSources=true -DdownloadJavadocs=true –DoutputDirectory=
target/eclipse-classes eclipse:eclipse 或者 mvn eclipse:eclipse
在此目录中生成 eclipse 工程,可以使用 eclipse 将工程进行导入。如下图:
图 10
5、工作空间布局
导入之后目录结构如下图:
图 11
src/main/java :存放 java 源文件。
src/main/resources:jelly/Groovy 视图文件。
src/main/webapp:静态资源文件,例如图片,HTML 文件。
pom.xml:配置文件,Maven 使用此文件编译插件。
6、源代码
由于版本的不同,在 src/main/java/com/jysong/jenkins 目录下可能有个 null 文件夹,
在文件夹下面有 HelloWorldBuilder.java 文件,将 HelloWorldBuilder.java 文件拷贝到 jenkins
文件夹下面,将 null 文件夹删除。并且将 HelloWorldBuilder.java 文件中的第一行的
package 最后面的.null 删除。HelloWorldBuilder.java 文件是一个开发插件的模板,包含
了开发一个简单插件的所有内容。后面将对这个文件代码进行详细分析。
在 src/main/resources/com/jysong/jenkins 目录下可能有个 null 文件夹,在文件夹下
面有个 HelloWorldBuilder 文件夹,将 HelloWorldBuilder 文件夹拷贝到 jenkins 文件夹下
面,将 null 文件夹删除。在 HelloWorldBuilder 文件夹下面有 global.jelly 和 config.jelly 配
置文件。这两个文件是进行页面配置的文件。
7、调试插件
在 windows 系统上,执行以下命令:
set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket, server=y, address
6
=8000, suspend=n
mvn hpi:run
使用 http://localhost:8080/ 在浏览器中登录,将会看到 jenkins 页在 Jetty 中运行。MAVEN_OPTS 启
动了端口为 8000 的调试器,可以在这个端口开启一个调试会话。
如果 8080 的端口被占用,将会出现错误,不会运行 jetty 服务器。可以更改端口使用以下命令:
mvn hpi:run –Djetty.port=8090
可以使用 http://localhost:8090/进行登录了。
设置上下文路径
mvn hpi:run –Dhpi.prefix=/jenkins
执行这个命令之后登录地址将变为 http://localhost:8090/jenkins
8、发布插件
运行以下命令,生成你的插件的图片。
mvn package
生成 ./target/*.hpi 文件,其他使用者可以使用 jenkins 的 web 界面上传到 jenkins。
9、安装插件
在 jenkins 的 web 界面中由
Manage Jenkins>Manage Plugins>Advanced
图 12
点击 Choose File,选择你的插件的 target 目录下的 hpi 文件。选择之后点击 Upload,插件
就会配置到 jenkins 中。
到此一个简单的插件开发完成了,可以在此基础上进行更复杂的开发。详细开发插件流程的
地址 https://wiki.jenkins-ci.org/display/JENKINS/Plugin+tutorial
源码分析
1、java 源代码
在目录 src/main/java/com/jysong/jenkins 下有文件 HelloWorldBuilder.java。代码如下:
public class HelloWorldBuilder extends Builder {
private final String name;
7
// Fields in config.jelly must match the parameter names in the
"DataBoundConstructor"
@DataBoundConstructor
public HelloWorldBuilder(String name) {
this.name = name;
}
/**
* We'll use this from the
config.jelly.
*/
public String getName() {
return name;
}
@Override
public boolean perform(AbstractBuild build, Launcher launcher,
BuildListener listener) {
// This is where you 'build' the project.
// Since this is a dummy, we just say 'hello world' and call that
// This also shows how you can consult the global configuration
a build.
of the builder
if (getDescriptor().getUseFrench())
listener.getLogger().println("Bonjour, "+name+"!");
listener.getLogger().println("Hello, "+name+"!");
else
return true;
}
// Overridden for better type safety.
// If your plugin doesn't really define any property on Descriptor,
// you don't have to do this.
@Override
public DescriptorImpl getDescriptor() {
return (DescriptorImpl)super.getDescriptor();
}
/**
* Descriptor for {@link HelloWorldBuilder}. Used as a singleton.
* The class is marked as public so that it can be accessed from views.
*
*
* See
src/main/resources/hudson/plugins/hello_world/HelloWorldBuilder/*.
jelly
* for the actual HTML fragment for the configuration screen.
*/
@Extension // This indicates to Jenkins that this is an implementation
8