jenkins插件开发

为什么要开发jenkins插件:

   Jenkins是持续集成运行、管理平台(与hudson一样,具体说明可以查看jenkins的wiki)。jenkins本身提供了一套插件的管理机制,这些插件允许可插拨形式存在。jenkins插件虽然能提供很多种插件,但还是不能满足我们持续集成的需要,所以需要定制一些插件来支撑整个持续集成平台的运行。

 

Jenkins运行周期:

Jenkins有自己运行的生命周期,如下:

  1. checkout -check out出源码
  2. Pre-build - 预编译
  3. Build wrapper-准备构建的环境,设置环境变量等
  4. Builder runs -执行构建,比如调用calling Ant, Make 等等
  5. Recording - 记录输出,如测试结果
  6. Notification - 通知成员

Jenkins提供的扩展点:

为了支撑插件能在各个生命周期中运行,jenkins提供了各种扩展点,我们主类必须要extends一个扩展点;针对现状,基本上只需要使用Notifier,与builder这两个扩展点;详细如下:

Ø  Builder:这个扩展点支撑的是构建这个阶段需要做的事情,包括prebuild postbuid、构建环境等步骤,例如我们更换slave机器的hosts插件

Ø  Notifier:包括通知、消息通知等情况,我们的sendnapolimessage是基于这种扩展点来开发的

具体扩展点说明请参考:https://wiki.jenkins-ci.org/display/JENKINS/Extension+points

插件开发步骤

设置settings.xml(包括代理)

  因为插件使用的是maven的管理形式,所以需要settings文件,了解maven的同学应该知道settings文件的作用,这里不多说。需要在我们的settings.xml中添加如下设置:


  
    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
    
  


由于下载比较慢,所以我添加了一个proxy,具体设置如下:


  
         
      my-proxy
                   
      true
                   
      http
                   
      218.14.227.197
                   
      3128
                   
      ***
      ***
                   
     repository.mycom.com|*.google.com
    
 


设置maven3

   Jenkins为什么要使用maven3,在使用maven2编译的时候都不会出现问题,但使用mvn-hpi插件的时候,会报空指针异常错误,查看了wiki,这个bug未解决,但切换到maven3该问题消失,应该是maven2对这个插件支持不够完善。

创建maven项目(pom文件介绍)

1、  使用mvn –cpucreate:hpi命令。会自己生成一个hellobuilder示例maven工程。,中间让你输入groupid与aid。

2、  在maven中添加我们需要的依赖以及jdk、开发者维护说明。和maven的方式一样。


   
     alibaba
     Developer gaofeng.qiangf
     xxx
   
 
 
    
             
             org.apache.maven.plugins
             maven-enforcer-plugin
             1.0.1
             
                    
             
             
        
             org.apache.maven.plugins
                  maven-compiler-plugin
                    
                    1.6
                        1.6
                          true
             
                
    
     


导入eclipse

使用命令 mvn eclipse:eclipse,然后再eclipse中使用import功能导入,这个不做详细介绍,相信大家都会使用

项目目录介绍(重要):

 jenkins插件开发_第1张图片

说明:src目录有三个目录

A、 main管理的是主程序的运行类,如图1标志

B、 resource管理的是该插件需要的配置,例如插件的局部配置、全局配置以及帮助,如图2标示

C、 webapp管理是该插件要引用的静态文件,例如js、html、img等,如图2标志

D、 如果需要做插件的参数化配置,即需要写jelly文件,则必须在resource目录下建一个与主类包名一样(层层嵌套)的文件夹,如图5标志,main->java主类SendBuildResultBuilder.java在resource中有个层级一模一样对应的文件夹。

jenkins插件开发_第2张图片


项目文件介绍(重要):

Ø  运行类:SendBuildResultBuilder.java因为继承了扩展点的类,所以插件运行的时候首先运行的是这个运行类,如图4

Ø  Config.jelly:在job中配置该插件,比如说需要配置插件的参数,则必须要写这个文件了

Ø  Global.jelly:该插件的全局配置。

Ø  *html:jelly文件中属性的帮助文件,。点击插件的“?”即可展示:

jenkins插件开发_第3张图片

 

运行类说明(包括必须方法):

  主要介绍编写插件需要注意的事项以及必须要实现的点

Ø  主类必须要继承一个扩展点。我们一般性会使用notifier和builder这两个扩展点,如:



Ø  类属性,类的属性和config.jelly需要的字段对应。并实现set和get方法,:

privateIntegercrid//config.jelly配置

jenkins插件开发_第4张图片


Ø  类的构造函数,本类的构造函数必须加@DataBoundConstructor,并且方法参数为类的属性,需要调用super(),使用@DataBoundConstructor的目的是将config.jelly中的参数与本类绑定。如下:

jenkins插件开发_第5张图片

Ø  public boolean perform(AbstractBuild build, Launcherlauncher,BuildListener listener),该方法是必须要override的。方法说明和参数说明如下:

jenkins插件开发_第6张图片


Ø  public DescriptorImpl getDescriptor():需要得到这个插件描述信息。如图:

jenkins插件开发_第7张图片


Ø  public static final class DescriptorImpl extendsBuildStepDescriptor

这个静态内部类的作用如下:每次保存全局配置的时候,jenkins都会调用该descriptor对象,并调用其onfigure方法,可以实现该方法并提供自己的定制在DescriptorImpl中的configure方法中,可以对全局配置进行操作,save方法用于将当前descriptor所提供的配置持久化(通过get防范)。为了使slave能正常工作,需要提供配置项的get方法;BuildStepDescriptor为插件执行时描述步骤;如图


jenkins插件开发_第8张图片

                           

这个内部类必须要使用的方法如下:


jenkins插件开发_第9张图片

jenkins插件开发_第10张图片

jenkins插件开发_第11张图片

Jelly说明:

Hudson/Jenkins插件描述文件采用是jelly写法,具体语法请看:https://wiki.jenkins-ci.org/display/JENKINS/Basic+guide+to+Jelly+usage+in+Jenkins

举例说明一下:


                 

                  
                   


说明:

Ø  *title:为要显示的标题,

Ø  filed:将调用的DescriptorImpl内部类的方法getXXXXX().filed域会将方法去掉get并且将第一个字母小写

Ø  description:将显示描述的内容

本地运行

进入workspace,找到插件的位置,使用mvn hpi:run,然后在浏览器中输入http://localhost:8080,使用mvn hpi:run会下载一个jenkins到你的work目录。

本地调试

  使用mvnDebughpi:run。然后在eclipse设置远程调试

远程调试(linux服务器端):

Linux容器需要开启hudson或者jenkins的debug模式,然后和本地调试一样

 

发布hpi

Mvn package 会在你的target生成一个hpi文件,这个文件就是我们需要的,然后将则个文件放入jenkins的plugins目录。重启即可。

 

参考文档:

https://wiki.jenkins-ci.org/display/JENKINS/Extend+Jenkins---插件

https://wiki.jenkins-ci.org/display/JENKINS/Extension+points---扩展点

https://wiki.jenkins-ci.org/display/JENKINS/Basic+guide+to+Jelly+usage+in+Jenkins-----jelly

 

 

你可能感兴趣的:(jenkins插件开发)