右脳系エンジニアのブログ

エンジニアとしての生き方のプロトタイピング、新しい社会のプロトタイプづくりをしています。

Basic guide to Jelly usage in Jenkins を翻訳してみた(途中まで)

Jenkinsプラグインの開発にあたって、Jellyの扱い方やメソッドとの関係性の理解に 結構つまったのですが、このページを教えてもらってだいぶ理解が進みました。

Basic guide to Jelly usage in Jenkins - Jenkins - Jenkins Wiki https://wiki.jenkins-ci.org/display/JENKINS/Basic+guide+to+Jelly+usage+in+Jenkins#BasicguidetoJellyusageinJenkins-Otherpredefinedobjects

せっかくなので途中までですが簡単に翻訳してみました。

JenkinsでJellyを使うための入門ガイド

もしあなたがJellyやJenkinsにあんまり詳しくなくて、プラグインの設定を作成するのが難しいと思うならこれを読むといい。 このページでは、プラグインの開発をはじめるのに必要ないくつかの簡単な事例について説明しているよ。

*.jellyファイルを読み込もう

Jenkinsの基本的な構造はこんなかんじになっている。

pom.xml src/main/java src/main/resources src/main/webapp

src/main/java/org/myorganization/MyAction.java というjavaファイルがあるとして、これにJellyファイルを定義してみようと思う。。

  1. resources フォルダ以下に、クラス名と同じフォルダを作成する。 (ここでは src/main/resources/org/myorganization/MyAction/ を作成する)

  2. Add index.jelly to that folder そしてそのフォルダに index.jelly ファイルを追加する (src/main/resources/org/myorganization/MyAction/index.jelly を追加する)

ここからより詳細を見ていこう。

it オブジェクトを理解する

さっきのセクションではJellyファイルがクラス名とフォルダ名で結び付けられていることについて説明したね。 これはつまりどういうことかっていうと各クラスのメソッドから呼び出すことが出来るってこと。 jellyでは$と波括弧を使った "${insert code here}"のような形式のコードをつかうことで、これらを結びつけているよ。

簡単なサンプル

javaファイルを作成する

これは src/main/java/org/myorg/MyAction.java をそのまま使おう

1.クラスにメソッドを追加する   こんなかんじ

public String getMyString() {
    return "Hello Jenkins!";
}

2.下記の内容をjellyに記述する

<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout"
         xmlns:t="/lib/hudson" xmlns:f="/lib/form">

    ${it.myString}
</j:jelly>

Load the class, and note that 'Hello Jenkins!' is displayed クラスをロードすると 'Hello Jenkins!' という文字が表示されているよ

いくつか注意点。 Jellyファイル内ではクラスメソッドにある 'get' は取り除かれるのと、取り除かれた残りの文字のうち1文字目は小文字になる。 Jellyがメソッドを見つけるために、javaの命名の慣習(getterはgetから初めてキャメルケースを使うこと)にしたがって書くことを推奨しているよ。

その他の定義済みオブジェクト

ページを描画するために、他のいくつかのオブジェクトも予め定義されているよ。

  • app - Jenkins(あるいはHudson)のインスタンス
  • instance - ビルドステップを設定するページのセクションのような設定オブジェクト。nullの場合は新しく追加された項目だということ。
  • descriptor - instanceのクラスに対応するDescriptorオブジェクト(ここを参照)
  • h - hudson.Functionsのインスタンス。これには便利な機能がたくさんある。

定義済みのURL

各ページでは、以下の変数を利用することで絶対URLを参照することができます

  • rootURL - JenkinsのインスタンスのURL
  • resURL - JavascriptやHTMLのような静的なwebappリソース (cf. Jenkins.RESOURCE_PATH)
  • imageURL - resURLと似ているが、/imagesが追加されている。アイコンなどを読み込むときに使う。

これらのURLは l:layout や an l:ajax ブロックですでに(ここちょっと誤訳あるかも。)定義されている。 これはajaxでロードされたページを除く、すべてのJenkinsのページで利用できるようになっているという意味だ。 ajaxでロードを行う際は、l:ajax タグを追加する必要がある。