Jenkins - 在不使用 Descriptor 的情况下保留插件设置
Jenkins - persist plugin settings without using Descriptor
我开发了一个简单的 Jenkins 插件。这是插件 class:
@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
class 的情况下坚持它 ?
我尝试将 load()
方法调用添加到 configure()
和 Plugin
构造函数。我也试过像这样覆盖 getConfigXml()
方法:
@Override
protected XmlFile getConfigXml() {
return new XmlFile(Jenkins.XSTREAM, new File(Jenkins.getInstance().getRootDir(), getClass().getName()+".xml"));
}
但是没有成功。有什么想法吗?
终于找到解决这个问题的方法了。似乎 Jenkins 无法保留静态 class 字段。我的 Plugin
class 现在看起来像这样:
@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;
}
}
我开发了一个简单的 Jenkins 插件。这是插件 class:
@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
class 的情况下坚持它 ?
我尝试将 load()
方法调用添加到 configure()
和 Plugin
构造函数。我也试过像这样覆盖 getConfigXml()
方法:
@Override
protected XmlFile getConfigXml() {
return new XmlFile(Jenkins.XSTREAM, new File(Jenkins.getInstance().getRootDir(), getClass().getName()+".xml"));
}
但是没有成功。有什么想法吗?
终于找到解决这个问题的方法了。似乎 Jenkins 无法保留静态 class 字段。我的 Plugin
class 现在看起来像这样:
@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;
}
}