18

現在のテスト結果を表に表示するように標準的なゼリー テンプレートを微調整しましたが、Jenkins 自身のテスト結果ページに見られるように差分を表示できるようにしたいと考えています。

例えば:

JUnit Tests: 0 failures (±0) , 1 skipped (+1)

Package               Duration   Fail  (diff)  Skip  (diff)  Total  (diff)
foo.bar.baz              89 ms      0      0     1       +1     5       +2
4

5 に答える 5

11

Jelly テンプレートの代わりに、Email Ext プラグイン用の Groovy テンプレートを記述します。Groovy テンプレートでは、ビルドのBuildオブジェクトにアクセスできます。次に、その上でgetTestResultActionを呼び出して、ビルドのAbstractTestResultActionを取得し、必要なものすべてをクエリできます。

Jenkins Main Module APIへのリンクは次のとおりです。Ext Email プラグインのサンプル Groovy テンプレートは にあり$JENKINS_HOME/plugins/email-ext/WEB-INF/classes/hudson/plugins/emailext/templates/groovy-html.templateます。Groovy テンプレート/スクリプトの使用に関する詳細は、Email Ext プラグインのドキュメントを参照してください。

于 2012-07-05T20:24:18.270 に答える
5

内部 API を介してアクセスする方法に苦労している場合 (知るのが難しく、常に制限が存在します)、別のより柔軟な方法があります。

Groovy テンプレートの代わりに FILE トークンを使用する

  1. スクリプトを使用してJenkins API経由でテストデータにアクセスします。あなたの場合、http://jenkins.server/job/yourjob/lastCompletedBuild/testReport/api/xmlemail.htmlのようになり、ワークスペースの下のように独自のhtmlファイルを生成します
  2. email-ext 構成のフォームで、Default ContentFILE トークンを使用して電子メールを直接送信する${FILE, path="email.html"}

上記のステップ 1 では、独自のテンプレートにより柔軟な方法を使用することもできます。私は Python スクリプトと単純な文字列テンプレートを使用します。

それは私にとって完璧に機能します。

于 2012-12-08T14:22:08.793 に答える
3

デフォルトの static-analysys.jelly スクリプトに基づく Jelly での私のソリューション

  <!-- JUnit TEMPLATE -->
  <j:set var="junitResultList" value="${it.JUnitTestResult}" />
  <j:if test="${junitResultList.isEmpty()!=true}">
    <div class="content">
      <a href="${rooturl}${build.url}/testReport">
        <h1>JUnit Tests</h1>
      </a>
      <table class="border">
        <tr>
          <th class="border">Package</th>
          <th class="border">Failed</th>
          <th class="border">Failed (diff)</th>
          <th class="border">Passed</th>
          <th class="border">Passed (diff)</th>
          <th class="border">Skipped</th>
          <th class="border">Skipped (diff)</th>
          <th class="border">Total</th>
          <th class="border">Total (diff)</th>
        </tr>
        <j:forEach var="junitResult" items="${it.JUnitTestResult}">
          <j:forEach var="packageResult" items="${junitResult.getChildren()}">
            <tr>
              <td class="border">
                <tt>${packageResult.getName()}</tt>
              </td>
              <td class="border test_failed">${packageResult.getFailCount()}</td>
              <td class="border test_failed">${packageResult.getFailCount()-packageResult.previousResult.getFailCount()}</td>
              <td class="border test_passed">${packageResult.getPassCount()}</td>
              <td class="border test_passed">${packageResult.getPassCount()-packageResult.previousResult.getPassCount()}</td>
              <td class="border test_skipped">${packageResult.getSkipCount()}</td>
              <td class="border test_skipped">${packageResult.getSkipCount()-packageResult.previousResult.getSkipCount()}</td>
              <td class="border">
                <b>${packageResult.getPassCount()+packageResult.getFailCount()+packageResult.getSkipCount()}
                </b>
              </td>
              <td class="border">
                <b>${packageResult.getPassCount()+packageResult.getFailCount()+packageResult.getSkipCount()-packageResult.previousResult.getPassCount()-packageResult.previousResult.getFailCount()-packageResult.previousResult.getSkipCount()}
                </b>
              </td>
            </tr>
            <j:forEach var="failed_test"
              items="${packageResult.getFailedTests()}">
              <tr>
                <td class="test_failed" colspan="5">
                  <tt>${failed_test.getFullName()}</tt>
                </td>
              </tr>
            </j:forEach>
          </j:forEach>
        </j:forEach>
      </table>
      <br />
    </div>
  </j:if>
于 2015-03-06T10:08:16.483 に答える