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 構成ページに表示したり、ルート アクション自体から使用したりすることはできません。

記述子を root アクションに追加しました:describe_as Java.hudson.model.Descriptor, :with => GitlabWebHookRootActionDescriptorが成功しませんでした。記述子の前にルート アクションがロードされていることをログで確認できますが、それが問題かどうかはわかりません。

ルートアクションから記述子に保存された構成を使用する方法について誰か考えがありますか?

4

1 に答える 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 に答える