火线教你如何开发Jenkins插件

提到Jenkins,做测试工作的无论是小伙伴、大伙伴还是老司机都是比较熟悉的。网上大部分资料无非三种:Jenkins简介、如何启动Jenkins、如何安装和使用Jenkins插件。本文作为一个jenkins的进阶:教你如何开发一个jenkins插件。话不多说,让我们直接切入正题。如本文题目所示,我会以火线为例,逐步讲述一个jenkins插件从无到有的整个过程。有些细心的小伙伴可能就疑惑了,jenkins我听说过,“火线”又是个啥呢?由于本文主题是Jenkins插件,对于火线的介绍请戳官网介绍。http://magic.360.cn/ 也许你会有意外收获。

1、  工欲善其事,必先利其器。

巧妇还难为无米之炊呢,更何况我们这些程序猿呢?来,先把今天的“器”备齐了以便我们之后的冲锋上阵,勇猛杀敌。

1)环境:Maven3、JDK6.0以上版本、Eclipse(选择自己使用的IDE就可以)

2)添加Maven配置,请将如下配置内容添加到您的*\.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>


注意:以上各个环境的安装步骤这里不在絮叨,网上一搜,一大丢。如果你是第一次安装使用Maven,编译项目时需要下载很多依赖包,此时此刻,你可以去洗个头,做个娘娘的发型,美美哒再回来。

2、  万事具备,只欠东风。

选择一个你喜欢的开发插件路径。例如我的选择在FireLine\jenkinsPlugin\

执行如下maven命令:

 mvn -Uorg.jenkins-ci.tools:maven-hpi-plugin:create

运行中间需要输入你的groupId和artifactId,如下图:


完成后会在当前目录下生成FireLinePlugin文件目录,此时此刻一个简单的jenkins插件模板就光荣诞生啦!!

3、  知其然知其所以然

以上准备工作完成后,即可动手操练起来,开发自己的jenkins插件。

3.1    插件项目目录结构

src/main/java:存放项目的java源码;

src/main/resources:存放插件的Jelly/Groovy视图文件;

src/main/webapp:存放插件的静态资源文件,例如图片、html文件等。(自动生成插件模板时无此目录,如需添加静态资源可自行创建)。

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插件的系统全局配置视图文件,如图:


3.2    生成eclipse项目

如果你的Eclipse开发环境未安装Maven插件,可以使用命令mvneclipse:eclipse 将maven项目转化成eclipse项目直接导入。若已安装maven插件,直接导入maven项目。使用maven命令创建插件会自动生成类文件HelloWorldBuilder.java,此处我将类名更改成FireLineBuilder。

3.3    代码详解

本模板中使用了jenkins的Builder作为扩展点,Jenkins中有多种不同扩展点,你也可以创建一个新的扩展点。详情可参考:https://wiki.jenkins-ci.org/display/JENKINS/Extension+points

FireLineBuilder类中通过@DataBoundConstructor注释来声明构造函数,构造函数参数与config.jelly配置文件中的字段一一对应。

在Jenkins中,job每次执行编译时,都会执行perform()方法,可在此方法内实现自己的插件定义。方法中有四个参数:

build:描述任务的一次构建,通过该对象可获取到当前构建的项目、工作空间、当前构建的执行结果等信息。

workspace:当前构建的工作路径。

launcher:用来启动构建。

listener:监控构建过程的状态。

注意:通过build对象可以获取到jenkins的构建路径,workspace获取的是构建项目的工作路径,此处注意区分。

在类FireLineBuilder中有个DescriptorImpl的内部实现类,其必须使用@extension来声明。可通过DescriptorImpl来处理全局系统配置,例如设置插件在项目构建配置中显示的名称等。

public String getDisplayName(){

           return"ExecuteFireLine";

    }

显示如图:


通过DescriptorImpl类中FormValidationdoCheckName(@QueryParameter String value)方法可以对*.jelly配置中传递的参数进行基本的校验。

注意:doCheck方法需要与配置中参数名称一一对应。(此坑本人已跳,无奈脸)

3.4    debug 插件

在项目目录下运行如下命令:

>set MAVEN_OPTS=-Xdebug-Xrunjdwp:transport=dt_socket,server=y,address=8000,suspend=n

>mvn hpi:run

在浏览器中访问http://localhost:8080/Jenkins,即可查看调试插件。

注意:如果修改resources和webapp中的内容,刷新页面即可看到最新修改,若修改了java源文件,需要重新编译,才能更新到最新的修改。

3.5    打包并部署自定义插件

执行mvn命令mvn package。打包完成后,在根目录下的target文件目录下会生成firelineplugin.hpi插件安装包。将firelineplugin.hpi安装到jenkins中即可使用自定义插件。

安装jenkins自定义插件有两种方式:

Ø  终止Jenkins,将firelineplugin.hpi拷贝到$JENKINS_HOME/plugins目录下并新建一个名为firelineplugin.hpi.pinned的空文件。重启Jenkins。

Ø  打开jenkins页面到“系统管理”à“管理插件”à“高级”,上传firelineplugin.hpi插件重启Jenkins。


菜鸟一枚,如果纰漏,还请斧正。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值