Jenkins:Ruby插件的全局配置

4
我有一个用于Jenkins的Ruby插件(plugin),我想在其中添加全局配置。
这个配置会显示在Jenkins的全局配置页面上: enter image description here 目前,我已经使用自定义描述器成功保存了全局配置。 我尝试使用父类(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

这个解决方案将保存操作委托给父类。但问题在于:

---- Debugging information ----
message             : Could not call org.jruby.RubyClass.writeObject()
cause-exception     : java.io.IOException
cause-message       : can not serialize singleton object
-------------------------------

无法理解什么是单例模式,因此我自己编写了一个方法将配置保存并加载到文件中。您可以在这里查看代码。
这绝对可以将数据保存到XML文件中,并在Jenkins启动时从文件中读取:
// on startup
INFO: =========== GitlabWebHookRootActionDescriptor initialize ===================
INFO: conf_param: aloha

// on save
INFO: =========== GitlabWebHookRootActionDescriptor configure ===================
INFO: form: {"conf_param"=>"juku"}

但是,我无法在Jenkins配置页面上显示保存的配置,也无法从根操作本身中获取它。
我已经使用以下代码将描述符添加到根操作:describe_as Java.hudson.model.Descriptor, :with => GitlabWebHookRootActionDescriptor,但没有成功。我可以在日志中看到根操作在描述符之前被加载,不知道这是否是问题所在。
有人有想法如何从根操作中使用描述符中保存的配置吗?
1个回答

1

一年后,答案终于来了: jenkins-mysql-job-databases-plugin :)

基本上,在插件中获取全局配置:

global_config = Java.jenkins.model.Jenkins.getInstance().getDescriptor(MyGlobalConfigDescriptor.java_class)

它返回MyGlobalConfigDescriptor对象,因此您可以调用其方法来检索配置值。

要在配置表单中显示它们:

f.entry :title => '我的全局配置', :field => 'my_global_config' do f.textbox :default => "#{descriptor.my_global_config}" end


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接