我有Jenkins的Ruby plugin我想添加全局配置。
配置显示在Jenkins全局配置页面上:
目前,我已设法使用自定义描述符保存全局配置。 尝试使用父类(Java.hudson.model.Descriptor)完成的序列化来实现,如下所示:
class GitlabWebHookRootActionDescriptor < Jenkins::Model::DefaultDescriptor
attr_reader :conf_param
def configure(req, form)
req.bindJSON(self, form)
save
true
end
end
此解决方案将save委托给父类。 这个问题是:
---- Debugging information ----
message : Could not call org.jruby.RubyClass.writeObject()
cause-exception : java.io.IOException
cause-message : can not serialize singleton object
-------------------------------
无法弄清楚单身是什么,所以最终编写了我自己的方法来保存和加载配置到文件。您可以看到代码here。
这肯定会将数据保存到XML文件,并在jenkins启动时从中读取:
// on startup
INFO: =========== GitlabWebHookRootActionDescriptor initialize ===================
INFO: conf_param: aloha
// on save
INFO: =========== GitlabWebHookRootActionDescriptor configure ===================
INFO: form: {"conf_param"=>"juku"}
但是,我无法将保存的配置显示在Jenkins配置页面上,也可以从root操作本身获得。
我已将描述符添加到root操作中:describe_as Java.hudson.model.Descriptor, :with => GitlabWebHookRootActionDescriptor
但没有成功。
我可以在日志中看到根操作在描述符之前加载,不知道这是不是问题。
是否有人知道如何在根操作中使用描述符中保存的配置?
答案 0 :(得分:1)
答案终于来了一年:jenkins-mysql-job-databases-plugin:)
基本上可以在插件中的任何位置获取全局配置:
global_config = Java.jenkins.model.Jenkins.getInstance().getDescriptor(MyGlobalConfigDescriptor.java_class)
它返回MyGlobalConfigDescriptor
对象,因此您可以调用方法来检索配置值。
以配置形式显示它们:
f.entry :title => 'My global config', :field => 'my_global_config' do
f.textbox :default => "#{descriptor.my_global_config}"
end