Jenkins插件编写(一)

介绍

今年我参加了GSoC的Jenkins的项目 —— 为Jenkins编写一个Code Coverage API Pluin,整合现存的所有Code Coverage插件并为此类插件提供一个泛用的API。借此机会我把期间学习的内容都记录下来,希望能给他人帮助,也让自己能养成一个写博客的习惯。

Jenkins是目前最流行的CI(持续集成,Continuous Integration)软件。数以百计的插件,为Jenkins提供了多种多样的功能和强大的扩展性。而通过Jenkins提供的接口,可以轻易的编写出自己的定制化的插件。这一系列博客将会讨论从插件的编写到在Update Center公布的全过程。

准备

开发环境

最新的Jenkins所需要的JDK版本是JDK8,编写插件过程中需要大量使用到Maven,其版本推荐为3.3.9以上。配置好这两个环境后就可以开始进行Jenkins插件的开发了。

创建项目骨架

通过使用maven,我们可以很方便的创建出插件项目的骨架,免去繁琐的配置。

1
mvn archetype:generate -Dfilter=io.jenkins.archetypes:plugin

在期间Maven会自动下载所需的依赖,然后便会进入交互模式,让我们配置要创建的骨架。

我目前的版本会让我们选择三个原型,分别是:

  • empty-plugin 只包含POM文件
  • global-configuration-plugin 包含POM文件和创建Global Configuration代码示例(这个以后会解释)
  • hello-world-plugin 包含POM文件和一个build step的示例(之后会解释)

在这里我选择了hello-world-plugin。之后交互界面会让我们选择原型的版本,这里我们选择最新的,然后根据提示输入我们的artifcatID和version等信息,最后在当前目录成功生成出项目骨架。

项目的结构

我们可以看到生成的项目的目录结构如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
- src
- main
- java
- io/jenkins/plugins/sample
- HelloWorldBuilder.java
- resources
- io/jenkins/plugins/sample
- HelloWorldBuild
- config.jelly
...
- Messages.properties
...
- index.jelly
- test
- java
- io/jenkins/plugins/sample
- HelloWorldBuilderTest.java
- pom.xml

其中pom.xml包含了构建Jenkins插件所需要的配置信息,test目录下是单元测试相关的内容,main目录下就是我们后面要重点谈论的地方。

插件的运行和生成

在创建完项目骨架后,我们可以通过在项目目录使用mvn hpi:run来启动一个包含这个插件的Jenkins Server。

我们新建一个Freestyle的项目。在设置页面,选择增加构建步骤,我们可以看到这里有一个Say hello world选项,这就是我们的插件的配置(我们插件的原型是hello-wolrd-plugin)。

点击选项填入name,之后构建项目,在Console Output中我们可以看到一句Hello, [name]的输出。这说明我们的插件运行成功了。

生成插件文件

我们可以通过mvn package创建出一个*.hpi文件,这就是我们的插件文件。可以在我们自己的Jnekins Server的管理插件 - 高级中的上传插件中,将插件部署到我们自己的Jenkins Server上。

这一节主要讲了如何生成项目的骨架,以及测试运行。但是最重要的部分 —— 怎么编写插件却没有涉及,这是我们之后几节的重点讨论内容。