Jenkins插件开发

使用脚手架创建插件项目

安装 JDK Maven 并配置 Maven 仓库 settings.xml


  
    org.jenkins-ci.tools 
  

  
    
      jenkins
      
        true 
      
       
        
          repo.jenkins-ci.org
          https://repo.jenkins-ci.org/public/
        
      
      
        
          repo.jenkins-ci.org
          https://repo.jenkins-ci.org/public/
        
      
    
  

使用脚手架创建项目

mvn archetype:generate -B -DarchetypeGroupId=io.jenkins.archetypes -DarchetypeArtifactId=hello-world-plugin -DhostOnJenkinsGitHub=true -DarchetypeVersion=1.7 -DartifactId=hello-world-plugin

运行,注意需要在 pipeline 下测试插件,jenkins 需要先安装 pipeline 插件

mvn hpi:run
image.png

打包插件并安装
mvn package 生成一个 hpi 文件,直接在 jenkins 后台上传即可。

开发

Jenkins 插件开发就是对于一系列的「扩展点」进行扩展实现自定义的功能。

扩展点 ExtensitionPoint

扩展点是 Jenkins 系统某个方面的接口或抽象类。这些接口定义了需要实现的方法,而 Jenkins 插件就需要实现这些方法,比如我写的插件需要实现 Builder 这个扩展点:

public class MavenCheck extends Builder {}

Descriptor 静态内部类

Descriptor 静态内部类是一个类的描述者,用于指明这是一个扩展点的实现,Jenkins 通过这个描述者才能知道我们写的插件。每一个描述者静态类都需要呗 @Extension 注解,Jenkins 内部会扫描 @Extension 注解来获取注册了哪些插件:

@Extension
public static final class DescriptorImpl extends BuildStepDescriptor {
    public DescriptorImpl() {
        load();
    }

    // 表示这个 Builder 在 Jenkins Project 是否可用
    @Override
    public boolean isApplicable(Class aClass) {
        return true;
    }

    // 用于在 Jenkins 页面上的显示
    @Override
    public String getDisplayName() {
        return "Maven SNAPSHOT Check";
    }
}

数据的绑定

@DataBoundConstructor 注解作用于构造器上,用于在页面上配置的插件参数

    ...
    @DataBoundConstructor
    public MavenCheck(boolean check) {
        this.check = check;
    }

Jenkins 插件的页面使用 jelly, 一个正常的插件可以分成 3 个 jelly 文件:

  • index.jelly: 代表此插件的概要描述,可以在插件列表中看到;
  • global.jelly: 代表此插件的全局配置;
  • config.jelly: 代表此插件在单个 job 中的配置;

请注意 config.jelly 文件的位置,它的文件名需要与插件的类名一致

image.png

config.jelly 文件示例:



  
    
  

参考

  • 官方文档
  • 编写流水线兼容的插件
  • Jenkins插件开发入门指南

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