3

我有一个 Jenkins 的 Ruby插件,我想添加全局配置。

配置显示在 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

此解决方案将保存委托给父类。这个问题是:

---- 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但没有成功。我可以在日志中看到在描述符之前加载了根操作,不知道这是否是问题所在。

有人知道如何从根操作中使用描述符中保存的配置吗?

4

1 回答 1

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

于 2014-10-06T02:54:52.833 回答