Jenkinsプラグインを作成する際のJellyテンプレートでのハマりポイント

2012-11-19


Jenkinsプラグインを作成する際のJellyテンプレート作成でのハマりポイントをメモしておきます。 順次追記していきます。

if/elseを使いたい

<j:if></j:if>はありますが<j:else><j:elseif>はないようです。

<j:if></j:if>を使用するか<j:when></j:when><j:otherwise></j:otherwise>を使うといいと思います。

<!--
when/otherwise
-->
<j:choose>
    <j:when test="${tool == 'chef'}">
        <option value="chef" selected="selected">Chef</option>
    </j:when>
    <j:otherwise>
        <option value="chef">Chef</option>
    </j:otherwise>
</j:choose>

<!--
if文。elseやelseifはない
-->
<j:forEach var="summary" items="${it.ptdump}">
    <j:if test="${summary.qindex=='1'}">
Hello World
    </j:if>
<j:forEach>

repeatableタグ内のフォーム要素のhelpファイル

Jenkinsの管理画面ではフォーム要素の右側にクエスチョンマークが出て、クリックするとヘルプファイルを表示することができます。 通常はhelp-フォームのname属性.htmlという名前でhelpファイルを作成し、.javaファイルと同列に転がすと自動的にリンクされますが、repeatableタグを使用した場合、その中のフォーム要素でのヘルプファイルはこの命名規則が当てはまりません。

のように任意のhelpファイルを指定するようにします。 作成したhelpファイルは”src/webapp/“以下に設置するようにします。

repeatableタグ内のフォーム要素でFormValidationが効かない

フォームのバリデーション用メソッドはdoCheckName()という名前で作成しますが、repeatableタグ内のフォーム要素にはこの法則が当てはまらないようです。 以下のように任意のバリデーションメソッドを使用するようにします。

プルダウンメニューで選択し保存された値が正しく表示できない

プルダウンメニューで、保存時の値を選択状態にしたい場合、公式プラグインでも以下のようにしている例を見ます。 しかしこの記述では描画されたHTMLではselected=”true”のように描画されてしまい、ブラウザによっては動作しないと思われます。

<f:option value=”chef” selected=’${instance.tool==”chef”}’>Chef</f:option><option selected=”true”>Chef</option>

そのため、私はwhen/otherwiseを使用して以下のように記述しました。

テンプレート中で外部CSSを参照したい

以下のようにテンプレートに記述すればOK。

<!--
実際のファイルの置き場所は以下のようになる。
src/main/webapp/css/style.css
src/main/webapp/script/jquery_min.js
-->
<link rel="stylesheet" href="/plugin/plugin_name/css/style.css" />
<script type="text/javascript" src="/plugin_name/script/jquery.min.js"></script>

JenkinsのActionクラスを拡張して「ビルド後の画面」を作成した場合に、左メニューが出ない

以下のようにsidepanel.jellyをincludeしてください。

<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">
  <l:layout>
    <st:include it="${it.owner}" page="sidepanel.jelly" />
    <l:main-panel>
      <h2>右側メインエリア</h2>
    </l:main-panel>
  </l:layout>
</j:jelly>

repeatabledeletebuttonが出ない

という現象に遭遇しましたが、<f:entry></f:entry>で括ってやらないと駄目です。

repeatabledeletebuttonの説明

<f:section title="インスタンス設定">
  <f:entry field="envs" title="インスタンス">
    <f:repeatable field="envs" minimum="1">
      <j:set var="helpURL" value="/plugin/aws_management/" />
      <table width="100%">
        <f:entry field="envName" title="名前(整理用)" help="${helpURL}help-envName.html" >
          <f:textbox></f:textbox>
        </f:entry>
        <f:entry>
          <div align="right">
            <f:repeatableDeleteButton />
            <hr />
          </div>
        </f:entry>
      </table>
    </f:repeatable>
    <f:entry>
    <div><hr /></div>
    </f:entry>
  </f:entry>
</f:section>

Profile picture of sakama

Written by sakama Data engineer who lives and works in Tokyo for successful data analytics You can follow me on Twitter

© 2022, sakama.dev - Built with Gatsby

Author

Profile picture of sakama

Written by sakama Data engineer who lives and works in Tokyo for successful data analytics You can follow me on Twitter

Socials

github.com/sakama

Recent Posts

Categories

Tags