首页 文章

使用email-ext插件从Jenkins发送有关电子邮件的Cppcheck结果/报告

提问于
浏览
1

我正在尝试使用来自Jenkins构建的email-ext插件发送电子邮件的 cppcheck 报告 . 到目前为止,唯一的方法似乎是创建一个自定义模板 - 果冻或groovy . 从这篇文章 - “Can I configure jenkins to send an email with a static analysis report summary?” - 看起来我应该能够实例化CppcheckBuildAction并使用它的方法,但由于某种原因,它并没有我在果冻模板中放入的代码来检查:

<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模板中,如果我尝试在对象上调用getResult方法,我实际上会得到像"Exception: javax.script.ScriptException: java.lang.NullPointerException: Cannot get property 'getResult' on null object"这样的错误消息 .

有没有人尝试使用这个email-ext插件或其他方式通过电子邮件发送Cppcheck结果/报告?

顺便说一下,还有另外一个帖子,其他人正试图做我似乎活跃的事情,或者那里没有真正的互动 - “What's wrong with following jelly script template for cppcheck in email-ext plugin of hudson

2 回答

  • 1

    你只需使用错误的命名空间,右边一个是: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>
    

    请享用!

  • 0

    我发现自己想要做同样的事情:发送一封带有cppcheck分析结果的email-ext电子邮件 .

    这个果冻脚本与谢尔盖上面提供的内容一起使用,并创建一个类似于结果页面中的表格 .

    希望这会在某个地方节省一个小时 .

    <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>
    

相关问题