doCheckXxxx と doFillXxxxItems

Jenkins 使ってますか?

便利ですよねー。私が始めて触ったのは前のプロジェクトで、その頃はまだ Hudson おじさんでした。
今ではJenkins を使っていなかったら、そのプロジェクトは大丈夫かしら?と心配になります。

Jenkinsプラグイン作ってますか?

このJenkinsの良いところとして、さまざまなプラグインがあり、それらを組み合わせて使う事で、より Jenkins は賢くなり、Jenkins で出来る事が増えます。
そして、Jenkins が Java で実装されているということで、そのプラグインJava で(簡単に)作る事が出来ます。

とゆーことで、Jenkins プラグインを作成する際に、私が得た(躓いた)知識を幾つかに分けて紹介します。
もし間違っていましたら、ご指摘頂けると助かります。

doCheckXxxx と doFillXxxxItems について

Jenkins プラグインでは、設定画面などの入力項目に対して、特定の命名規則に沿ったメソッドを用意してあげると、Jenkins がそのメソッドを勝手に呼び出してくれるものがあります。
それが doCheckXxxx と doFillXxxxItems です(他にもあるのかしら(・3・)?)。
それぞれ具体的に見ていきます。

doCheckXxxx

Jenkins のプラグインを作成する中で、設定画面等に独自の入力項目を用意したくなる場合があります。

これらの中でテキストボックスに対して入力チェック*1を行いたい場合、その対象のテキストボックスのプロパティ名に対応するチェックメソッドを用意してあげると、そのテキストボックスに対する入力があった場合に、用意したチェックメソッドを Jenkins が呼び出してくれます*2

こんな感じ。

jelly のサンプル

(src/main/resources/com/sample/jenkins/plugin/SampleBuilder/config.jelly)

<f:entry title="Free word" field="word">
  <f:textbox />
</f:entry>
Java のサンプル

(src/main/java/com/sample/jenkins/plugin/SampleBuilder$DescriptorImpl)

public FormValidation doCheckWord(@QueryParameter String value) {
    if (value.length() == 0) {
        return FormValidation.error("条件は必須です。");
    }
    return FormValidation.ok();
}

大事なのは、 で指定した field 属性と同じ名前(キャメルケース)で、チェックメソッドを用意するということ。
今回の例でいえば、 の field 属性は「word」なので、チェックメソッドは、「doCheckWord」となります。

もっと詳しい解説はこちらのサイトとかを見てみて下さい(丸投げ)より詳しく解説されてます( ̄▽ ̄)。

doFillXxxxItems

同じく入力項目としてプルダウンを用意して、今度はその選択候補を設定してくれるのがこのメソッド(命名規則)。

こんな感じ。

jelly のサンプル
<f:entry title="Pulldown" field="person">
  <f:select />
</f:entry>
Java のサンプル
public ListBoxModel doFillPersonItems() {
    ListBoxModel items = new ListBoxModel();
    for (Person person : persons) {
        items.add(person.getName(), person.getId());
    }
    return items;
}

これも大事なのは、 で指定した field 属性と同じ名前(キャメルケース)で、チェックメソッドを定義するということ。
今回の例でいえば、 の field 属性は「person」なので、チェックメソッドは、「doFillPersonItems」となります。

Java で何かしら処理した値を出したいような場合には、これを使えば良いと思います。

逆に、「はい」「いいえ」みたいなものをプルダウンにしたいのなら、別にこの方法でなくても良いと思います。jelly ファイルにベタに書いたのでも個人的には問題無いんちゃうかな〜(そもそも「はい」「いいえ」はプルダウンじゃなくて、ラジオとかチェックボックスだろ、という声が聞こえてきますが〜(・ω・`))。

とまぁ

こんな感じでこれから色々と私が躓いたところで、皆さんが躓かないように、紹介していけたらと思います(・ω・)ノ

*1:例えば、必須チェックとか、有効性チェックとか

*2:ちなみに、このチェックメソッドは、テキストボックス以外に対しても行うこと事も出来ますが、その場合、チェックメソッドの呼び出しを明示的に指定する必要があります。詳しくは後日