独自の Jenkins の設定(グローバルな設定)をした〜い

Jenkins プラグイン開発ネタの第二弾。

今回は、Jenkins 管理画面で独自の項目を設定したい場合の拡張についてやってみようず。

管理画面の設定情報

Jenkins プラグインを「mvn -cpu hpi:create」で作った時に最初にひな形として定義されているサンプルでも、管理画面に独自の設定(使用する言語の設定)をしているが、このサンプルでは、Descriptor にその情報を保持している。
これでは、この Descriptor のエンクロージングクラスからしか使うことが出来ない(はず)出来る*1
なので、他の独自 Builder やら、独自 Parameter やら、他の独自拡張クラスから、参照することが出来ない(はず)。

そこで、jenkins.model.GlobalConfiguration クラスを使用する。
管理画面の独自設定項目については、このクラスを拡張して定義してあげることで、その他の独自拡張クラスから、設定された値を参照することができる。

Java

こんな感じ。

package com.sample.jenkins;

@Extension
public class ExtensionConfiguration extends GlobalConfiguration {

    public ExtensionConfiguration() {
        load();
    }

    @Override
    public boolean configure(StaplerRequest req, JSONObject json) throws FormException {
        req.bindJSON(this, json);
        return true;
    }
}

View は

これに該当する View ファイルは、こんな感じ。

package com.sample.jenkins.ExtensionConfiguration

def f=namespace(lib.FormTagLib)

f.section(title:"Sample") {
    f.entry(title:_("Value"), field:"value", description:_("Please enter sample value")) {
        f.textbox(default: "xxx")
    }
}


一点注意が必要なのが、通常 View となるファイルは、「.jelly」となるが、この GlobalConfiguration を拡張したクラスに対する View ファイルは、「.groovy」となる点だ。
定義する内容自体は、「.jelly」とさほど変わらないが、若干書き方も違うので、注意が必要。

上記の View は .groovy で書いているが、他の View 同様に .jelly でもOK。
id:kiy0taka さんありがとうございます!

あとは

用意した独自の Config クラスに、自身のインスタンスを取得する Factory メソッドを用意すれば OK。
設定情報を参照したい場合は、Factory メソッドで取得した Config クラスから参照する。

public static ExtensionConfiguration get() {
    return GlobalConfiguration.all().get(ExtensionConfiguration.class);
}

こんな感じで

GlobalConfiguration を拡張した、独自の設定用 Config クラスを用意すれば、他に定義した複数の Builder や Parameter から参照できる。
みなさんも、独自の設定情報を定義したくなったら試してみては :-P

*1:id:kiy0taka さんのコメントにある通り、Jenkins.getInstance().getDescriptor(HelloWorldBuilder.class) と辿れば参照できる