1

Jenkinsビルドのemail-extプラグインを使用して、電子メールでcppcheckレポートを送信しようとしています。これまでのところ、唯一の方法は、カスタムテンプレート(ゼリーまたはグルービー)を作成することであるように思われます。この投稿から-「静的分析レポートの要約を含む電子メールを送信するようにjenkinsを構成できますか?」-CppcheckBuildActionをインスタンス化してそのメソッドを使用できるはずですが、何らかの理由でインスタンス化されていないようです(つまり、オブジェクトはnullです)。これを確認するためにゼリーテンプレートに入れたコードは次のとおりです。

<j:set var="cppcBuildAction" value="${it.getAction('com.thalesgroup.hudson.plugins.cppcheck.CppcheckBuildAction')}"/>
<j:if test="${cppcBuildAction==null}">
<p><i>cppcBuildAction is null!</i></p>
</j:if>

(hudson.plugins.cppcheck.CppcheckBuildActionも試しました)そして、確かに、cpppcBuildActionはnullになります!ビルド結果の電子メールで。(ジェリーでこれをテストするには、「if」句を挿入する必要がありました。それ以外の場合はエラーがスローされないためです。groovyテンプレートでは、実際には「Exception:javax.script.ScriptException:java.lang」のようなエラーメッセージが表示されます。 .NullPointerException:オブジェクトでgetResultメソッドを呼び出そうとすると、「nullオブジェクトでプロパティ'getResult'を取得できません」)。

このemail-extプラグインなどを使用して、Cppcheckの結果/レポートを電子メールで送信しようとした人はいますか?

ところで、他の誰かが私がやろうとしていることをやろうとしているが、スレッドがアクティブではないようであるか、そこで実際の相互作用が起こっていないという別の投稿があります-" cppcheckの次のゼリースクリプトテンプレートの何が問題になっていますかメールで-ハドソンのextプラグイン"

4

2 に答える 2

2

間違った名前空間を使用しているだけです。正しい名前は org.jenkinsci.plugins.cppcheck.CppcheckBuildAction です。

デバッグには、次のコードを使用できます。

<j:forEach var="a" items="${build.getActions()}">
action: ${a.getClass().getName()}
<BR/>
</j:forEach>

そして最後に、次のコードが機能します。

<!-- CppCheck TEMPLATE -->

<j:set var="cppcheckAction" value="${it.getAction('org.jenkinsci.plugins.cppcheck.CppcheckBuildAction')}" />
<j:if test="${cppcheckAction!=null}">
    <j:set var="cppcheckResult" value="${cppcheckAction.getResult()}" />
    <j:if test="${cppcheckResult!=null}">
        <TABLE width="100%">
            <TR><TD class="bg1" colspan="2"><B>CPPCHECK RESULT</B></TD></TR>
            <TR bgcolor="white"><TD class="test_failed" colspan="2"><B><li><a href="${rooturl}${build.url}cppcheckResult">Found: ${cppcheckResult.report.getNumberTotal()}</a></li></B></TD></TR>
        </TABLE>
        <BR/>
    </j:if>
</j:if>

楽しみ!

于 2013-09-17T08:25:04.407 に答える
0

私は同じことをしたいと思っていました: cppcheck 分析の結果を電子メールで送信します。

このゼリー スクリプトは、上で Sergey が提供したものと連携して、結果ページにあるものと同様のテーブルを作成します。

うまくいけば、これで誰かがどこかで1時間節約できるでしょう。

<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define">
  <html>
    <j:set var="cppcheckAction" value="${it.getAction('org.jenkinsci.plugins.cppcheck.CppcheckBuildAction')}" />
      <j:if test="${cppcheckAction!=null}">
    <j:set var="cppcheckResult" value="${cppcheckAction.getResult()}" />
    <j:if test="${cppcheckResult!=null}">
      <h2>Summary</h2>
        <style type="text/css">
    #cppcheckStatistics { width: auto; }
    #cppcheckStatistics .number { text-align: right; }
        </style>
        <table class="pane sortable" id="cppcheckStatistics">
          <thead>
            <tr>
              <td class="pane-header">Severity</td>
              <td class="pane-header">Count</td>
              <td class="pane-header">Delta</td>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td class="pane">Error</td>
              <td class="pane number">${cppcheckResult.statistics.getNumberErrorSeverity()}</td>
              <td class="pane number">${cppcheckResult.getDiff().getNumberErrorSeverity()}</td>
            </tr>
            <tr>
              <td class="pane">Warning</td>
              <td class="pane number">${cppcheckResult.statistics.getNumberWarningSeverity()}</td>
              <td class="pane number">${cppcheckResult.getDiff().getNumberWarningSeverity()}</td>
            </tr>
            <tr>
              <td class="pane">Style</td>
              <td class="pane number">${cppcheckResult.statistics.getNumberStyleSeverity()}</td>
              <td class="pane number">${cppcheckResult.getDiff().getNumberStyleSeverity()}</td>
            </tr>
            <tr>
              <td class="pane">Performance</td>
              <td class="pane number">${cppcheckResult.statistics.getNumberPerformanceSeverity()}</td>
              <td class="pane number">${cppcheckResult.getDiff().getNumberPerformanceSeverity()}</td>
            </tr>
            <tr>
              <td class="pane">Portability</td>
              <td class="pane number">${cppcheckResult.statistics.getNumberPortabilitySeverity()}</td>
              <td class="pane number">${cppcheckResult.getDiff().getNumberPortabilitySeverity()}</td>
            </tr>
            <tr>
              <td class="pane">Information</td>
              <td class="pane number">${cppcheckResult.statistics.getNumberInformationSeverity()}</td>
              <td class="pane number">${cppcheckResult.getDiff().getNumberInformationSeverity()}</td>
            </tr>
            <tr>
              <td class="pane">No category</td>
              <td class="pane number">${cppcheckResult.statistics.getNumberNoCategorySeverity()}</td>
              <td class="pane number">${cppcheckResult.getDiff().getNumberNoCategorySeverity()}</td>
            </tr>
          </tbody>
          <tfoot>
            <tr class="sortbottom">
              <td class="pane-header">Total</td>
              <td class="pane-header number"><B><a href="${rooturl}${build.url}cppcheckResult">${cppcheckResult.report.getNumberTotal()}</a></B></td>
              <td class="pane-header number"><B><a href="${rooturl}${build.url}cppcheckResult/source.all/?before=5&amp;after=5&amp;states=new">${cppcheckResult.getDiff().getNumberTotal()}</a></B></td>
            </tr>
          </tfoot>
        </table>
      </j:if>
    </j:if>
  </html>
</j:jelly>
于 2016-07-25T18:39:05.590 に答える