java - Jenkins - 不使用描述符保留插件设置

标签 java jenkins continuous-integration jenkins-plugins

我开发了一个简单的 Jenkins 插件。这是插件类:

@Extension
public class Plugin extends hudson.Plugin {
    private static String URL;

    @Override
    public void configure(StaplerRequest req, JSONObject formData) throws IOException, ServletException, Descriptor.FormException {
        super.configure(req, formData);
        URL = formData.getString("url");
        save();
    }

    @Override
    public void start() throws Exception {
        super.start();
        load();
    }
}

而且我还有描述 /configure 页面上的 URL 字段的 config.groovy:

package com.example.Plugin

f = namespace("lib/form")

f.section(title: "My settings section") {
    f.entry(title: "URL", field: "url") {
        f.textbox(value: my.URL) {
        }
    }
}

问题是当我重新启动 Jenkins 时,我的 URL 设置丢失了。如何在不为我的插件实现 Descriptor 类的情况下保留它?

我尝试将 load() 方法调用添加到 configure()Plugin 构造函数。我还尝试重写 getConfigXml() 方法,如下所示:

@Override
protected XmlFile getConfigXml() {
    return new XmlFile(Jenkins.XSTREAM, new File(Jenkins.getInstance().getRootDir(), getClass().getName()+".xml"));
}

但是没有成功。有什么想法吗?

最佳答案

终于找到解决这个问题的方法了。 Jenkins 似乎无法保留静态类字段。我的 Plugin 类现在如下所示:

@Extension
public class Plugin extends hudson.Plugin {
    private String url;
    private static Plugin INSTANCE;

    @Override
    public void configure(StaplerRequest req, JSONObject formData) throws IOException, ServletException, Descriptor.FormException {
        super.configure(req, formData);
        url = formData.getString("url");
        save();
    }

    @Override
    public void start() throws Exception {
        super.start();
        load();
        INSTANCE = Jenkins.getInstance().getPlugin(Plugin.class);
    }

    static String getUrl() {
        if (INSTANCE == null) {
            throw new IllegalStateException("Plugin instance is not defined yet");
        }
        return INSTANCE.url;
    }
}

关于java - Jenkins - 不使用描述符保留插件设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35502598/

相关文章:

php - Jenkins如何发布phpDox

qt - 将 gitLab-CI 用于 Qt 项目

java - java中的网页抓取和数据处理

Java泛型方法

Ubuntu-process 不是从 jenkins 启动的

continuous-integration - 将 SourceMonitor 集成到 Jenkins CI 系统中

java - Nexus/Maven 可以同时存储 32 位和 64 位工件吗?

java - 如何将 int 的所有数字相乘而不将它们转换为字符串,然后使用带有 for 循环的 charAt 函数?

java - Spring amqp 当rabbitmq server和consumer之间出现网络故障时,抛出AmqpIOException,consumer不会重试

jenkins - 将映射变量导入 Jenkinsfile 环境阶段