2013-10-02 110 views
3

对于Jenkins,我有一个Ruby plugin我想将全局配置添加到。#Jenkins:Ruby插件的全局配置

的配置显示詹金斯全局配置页面: 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 
------------------------------- 

无法弄清楚什么是单身,所以结束了写我自己的方法来保存和加载配置文件。你可以看到代码here

这绝对设法将数据保存到一个XML文件,并从中读取时,詹金斯开始:

// on startup 
INFO: =========== GitlabWebHookRootActionDescriptor initialize =================== 
INFO: conf_param: aloha 

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

但是,我不能要在詹金斯配置页面或显示保存的配置可以从根本行动本身获得。

我已经将描述符添加到根操作:describe_as Java.hudson.model.Descriptor, :with => GitlabWebHookRootActionDescriptor但没有成功。 我可以在日志中看到root操作在描述符之前加载,不知道是否是问题所在。

有没有人有关于如何使用根操作描述符中保存的配置的想法?答案

回答

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