栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Jenkins插件开发——新增全局参数配置

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Jenkins插件开发——新增全局参数配置

Jenkins插件开发——新增全局参数配置 前言

在jenkins插件开发的过程中,每一次build构建插件的时候,可能某些参数一直是固定的,对于这些固定的配置,可以通过jenkins插件中提供的全局参数功能来进行配置。本次就简单梳理下jenkins插件开发时如何进行全局参数的配置。

插件工程maven依赖配置

jenkins提供了一个父pom文件,它帮我们集成了开发jenkins插件所有需要的组件,同时我们需要在properties中指定jenkins的版本以及java的版本,具体的pom文件如下:



    4.0.0
    
        org.jenkins-ci.plugins
        plugin
        4.4
        
    

    org.example
    jenkinsPlugin
    1.0-SNAPSHOT
    hpi

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

    
        UTF-8
        1.8
        1.8
        
        2.303.1
        8
    

测试插件流程

本次提供的demo案例中,可以通过全局配置的一个开关设置是否打印对应的日志。

代码

首先,新增构建的主类,通过@DataBoundConstructor注解绑定页面参数:

public class MyBuilder extends Builder {
    private final String name;

    @DataBoundConstructor
    public MyBuilder(String name) {
        this.name = name;
    }
}

之后新增一个内部类DescriptorImpl继承BuildStepDescriptor,注意这个类的访问级别需要是public的,同时设置@Extension注解(详细可参考jenkins源码):

@Extension
public static class DescriptorImpl extends BuildStepDescriptor {}

在DescriptorImpl中,我们需要重写isApplicable和getDisplayName两个方法,分别表示插件是否可见以及插件默认显示名称:

@Override
public boolean isApplicable(Class jobType) {
  return true;
}

// 插件任务在jenkins上面的显示名称
@NonNull
@Override
public String getDisplayName() {
  return PLUGIN_NAME;
}

还需要重写DescriptorImpl中的config方法,该方法提供了一个JSONObject类型的参数,可以通过该参数获得页面传过来的全局参数,同时需要调用save方法,该方法是将当前的全局配置持久化到磁盘,jenkins默认保存的是xml格式:

@Extension
public static class DescriptorImpl extends BuildStepDescriptor {
    @Getter
    @Setter
    private boolean printLog;
    @Getter
    @Setter
    private String log;

    @Override
    public boolean configure(StaplerRequest req, JSONObject json) throws FormException {
        // 获取页面参数
        printLog = json.getBoolean("printLog");
        log = json.getString("log");
        // 将配置写入磁盘
        save();
        return super.configure(req, json);
    }
}

这边的两个成员变量printLog,log和全局参数进行的绑定,具体可以看下下面的global.jelly参数文件。

完整构建主类代码如下:

public class MyBuilder extends Builder {
    private final String name;

    @DataBoundConstructor
    public MyBuilder(String name) {
        this.name = name;
    }

    @Override
    public boolean perform(AbstractBuild build, Launcher launcher, BuildListener listener) throws InterruptedException, IOException {
        PrintStream logger = listener.getLogger();
        logger.println("Hello " + name);

        boolean printLog = getDescriptor().isPrintLog();
        if (printLog) {
            logger.println("Log is " + getDescriptor().getLog());
        }
        return true;
    }

    @Override
    public DescriptorImpl getDescriptor() {
        return (DescriptorImpl) super.getDescriptor();
    }

    @Extension
    public static class DescriptorImpl extends BuildStepDescriptor {
        @Getter
        @Setter
        private boolean printLog;
        @Getter
        @Setter
        private String log;

        private static final String PLUGIN_NAME = "MyPlugin";

        public DescriptorImpl() {
            load();
        }

        @Override
        public boolean isApplicable(Class jobType) {
            return true;
        }

        // 插件任务在jenkins上面的显示名称
        @NonNull
        @Override
        public String getDisplayName() {
            return PLUGIN_NAME;
        }

        @Override
        public boolean configure(StaplerRequest req, JSONObject json) throws FormException {
            printLog = json.getBoolean("printLog");
            log = json.getString("log");
            // 将配置写入磁盘
            save();
            return super.configure(req, json);
        }
    }
}
配置

在resources目录配置对应的页面文件:

  1. 构建的主类

  2. jelly文件存放的目录,要和主类保持一致

  3. config.jelly文件中配置通过@DataBoundConstructor注解绑定的页面参数,本次配置具体如下:

    
    
      
        
      
    
    
  4. global.jelly文件中配置了全局参数,本次配置如下:

    
    
      
        
          
        
        
              
        
      
    
    
  5. index.jelly需要放到resources目录下面,这个文件中配置了插件的描述:

    
    
    
    My First Jenkins Plugin!
调试

执行mvn hpi:run 命令,启动一个本地的jenkins,通过默认的路径http://localhost:8080/jenkins,可以访问默认安装开发插件的jenkins,之后可以验证我们开发的插件。

启动完成之后,在jenkins的配置页面http://localhost:8080/jenkins/configure,可以看到我们新增的全局参数配置:

新增一个Job任务,选择我们开发的插件,添加参数:

构建任务,可以发现全局参数已经生效:

总结

参考链接:http://www.jenkins.io/zh/doc/developer/plugin-development/

代码地址:https://github.com/yzh19961031/blogDemo/tree/master/jenkinsPlugin

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/981551.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号