Dear Kamal,
Kindly let me know where to place cust.jelly in .jenkins directory once we
customize and how to use in jenkins UI in Default Content field?
-
Ahmed
On Wednesday, 19 September 2012 18:12:11 UTC+5, Kamal Ahmed wrote:
>
> try this as an example (you might have to tweek a bit)
>
> more cust.jelly
> <j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler"
> xmlns:d="jelly:define">
>
> <STYLE>
> BODY, TABLE, TD, TH, P {
> font-family:Verdana,Helvetica,sans serif;
> font-size:11px;
> color:black;
> }
> h1 { color:black; }
> h2 { color:black; }
> h3 { color:black; }
> TD.bg1 { color:white; background-color:#0000C0; font-size:120% }
> TD.bg2 { color:white; background-color:#4040FF; font-size:110% }
> TD.bg3 { color:white; background-color:#8080FF; }
> TD.test_passed { color:blue; }
> TD.test_failed { color:red; }
> TD.console { font-family:Courier New; }
> </STYLE>
> <BODY>
> <j:set var="spc" value="&nbsp;&nbsp;" />
>
> <!-- GENERAL INFO -->
>
> <TABLE>
> <TR><TD align="right">
> <j:choose>
> <j:when test="${build.result=='SUCCESS'}">
> <IMG SRC="${rooturl}static/e59dfe28/images/32x32/blue.gif" />
> </j:when>
> <j:when test="${build.result=='FAILURE'}">
> <IMG SRC="${rooturl}static/e59dfe28/images/32x32/red.gif" />
> </j:when>
> <j:otherwise>
> <IMG SRC="${rooturl}static/e59dfe28/images/32x32/yellow.gif" />
> </j:otherwise>
> </j:choose>
> </TD><TD valign="center"><B style="font-size: 200%;">BUILD
> ${build.result}</B></TD></TR>
> <TR><TD>Build URL</TD><TD><A
> href="${rooturl}${build.url}">${rooturl}${build.url}</A></TD></TR>
> <TR><TD>Project:</TD><TD>${project.name}</TD></TR>
> <TR><TD>Date of build:</TD><TD>${it.timestampString}</TD></TR>
> <TR><TD>Build duration:</TD><TD>${build.durationString}</TD></TR>
> </TABLE>
> <BR/>
>
> <!-- CHANGE SET -->
>
> <j:set var="changeSet" value="${build.changeSet}" />
> <j:if test="${changeSet!=null}">
> <j:set var="hadChanges" value="false" />
> <TABLE width="100%">
> <TR><TD class="bg1" colspan="2"><B>CHANGES</B></TD></TR>
> <j:forEach var="cs" items="${changeSet}" varStatus="loop">
> <j:set var="hadChanges" value="true" />
> <j:set var="aUser" value="${cs.hudsonUser}"/>
> <TR>
> <TD colspan="2" class="bg2">${spc}Revision
> <B>${cs.commitId?:cs.revision?:cs.changeNumber}</B> by
> <B>${aUser!=null?aUser.displayName:cs.author.displayName}: </B>
> <B>(${cs.msgAnnotated})</B>
> </TD>
> </TR>
> <j:forEach var="p" items="${cs.affectedFiles}">
> <TR>
> <TD width="10%">${spc}${p.editType.name}</TD>
> <TD>${p.path}</TD>
> </TR>
> </j:forEach>
> </j:forEach>
> <j:if test="${!hadChanges}">
> <TR><TD colspan="2">No Changes</TD></TR>
> </j:if>
> </TABLE>
> <BR/>
> </j:if>
>
> <!-- ARTIFACTS -->
>
> <j:set var="artifacts" value="${build.artifacts}" />
> <j:if test="${artifacts!=null and artifacts.size()>0}">
> <TABLE width="100%">
> <TR><TD class="bg1"><B>BUILD ATRIFACTS</B></TD></TR>
> <TR>
> <TD>
> <j:forEach var="f" items="${artifacts}">
> <li>
> <a href="${rooturl}${build.url}artifact/${f}">${f}</a>
> </li>
> </j:forEach>
> </TD>
> </TR>
> </TABLE>
> <BR/>
> </j:if>
>
> <!-- MAVEN ARTIFACTS -->
>
> <j:set var="mbuilds" value="${build.moduleBuilds}" />
> <j:if test="${mbuilds!=null}">
> <TABLE width="100%">
> <TR><TD class="bg1"><B>BUILD ATRIFACTS</B></TD></TR>
> <j:forEach var="m" items="${mbuilds}">
> <TR><TD class="bg2"><B>${m.key.displayName}</B></TD></TR>
> <j:forEach var="mvnbld" items="${m.value}">
> <j:set var="artifacts" value="${mvnbld.artifacts}" />
> <j:if test="${artifacts!=null and artifacts.size()>0}">
> <TR>
> <TD>
> <j:forEach var="f" items="${artifacts}">
> <li>
> <a href="${rooturl}${mvnbld.url}artifact/${f}">${f}</a>
> </li>
> </j:forEach>
> </TD>
> </TR>
> </j:if>
> </j:forEach>
> </j:forEach>
> </TABLE>
> <BR/>
> </j:if>
>
> <!-- JUnit TEMPLATE -->
>
> <j:set var="junitResultList" value="${it.JUnitTestResult}" />
> <j:if test="${junitResultList.isEmpty()!=true}">
> <TABLE width="100%">
> <TR><TD class="bg1" colspan="2"><B>Praefectus Nose Unit Tests</B></TD></TR>
> <j:forEach var="junitResult" items="${it.JUnitTestResult}">
> <j:forEach var="packageResult" items="${junitResult.getChildren()}">
> <TR><TD class="bg2" colspan="2"> Name: ${packageResult.getName()} Failed:
> ${packageResult.getFailCount()} test(s), Passed:
> ${packageResult.getPassCount()} tes
> t(s), Skipped: ${packageResult.getSkipCount()} test(s), Total:
> ${packageResult.getPassCount()+packageResult.getFailCount()+packageResult.getSkipCount()}
>
> test(
> s)</TD></TR>
> <j:forEach var="failed_test" items="${packageResult.getFailedTests()}">
> <TR bgcolor="white"><TD class="test_failed" colspan="2"><B><li>Failed:
> ${failed_test.getFullName()}<br/><pre>${failed_test.errorDetails}</pre></li></B></TD></
> TR>
> <TR bgcolor="white"><TD class="test_failed" colspan="2"><B><li>StackTrace:
> ${failed_test.getFullName()}<br/><pre>${failed_test.errorStackTrace}</pre></li></B>
> </TD></TR>
> </j:forEach>
> </j:forEach>
> </j:forEach>
> </TABLE>
> <BR/>
> </j:if>
>
> <!-- COBERTURA TEMPLATE -->
>
> <j:set var="coberturaAction" value="${it.coberturaAction}" />
> <j:if test="${coberturaAction!=null}">
> <j:set var="coberturaResult" value="${coberturaAction.result}" />
> <j:if test="${coberturaResult!=null}">
> <table width="100%"><TD class="bg1" colspan="2"><B>Cobertura
> Report</B></TD></table>
> <table width="100%"><TD class="bg2" colspan="2"><B>Project Coverage
> Summary</B></TD></table>
> <table border="1px" class="pane">
> <tr>
> <td>Name</td>
> <j:forEach var="metric" items="${coberturaResult.metrics}">
> <td>${metric.name}</td>
> </j:forEach>
> </tr>
> <tr>
> <td>${coberturaResult.name}</td>
> <j:forEach var="metric" items="${coberturaResult.metrics}">
> <td
> data="${coberturaResult.getCoverage(metric).percentageFloat}">${coberturaResult.getCoverage(metric).percentage}%
> (${coberturaResult.getCoverage(metric)})
> </td>
> </j:forEach>
> </tr>
> </table>
>
> <j:if test="${coberturaResult.sourceCodeLevel}">
> <h2>Source</h2>
> <j:choose>
> <j:when test="${coberturaResult.sourceFileAvailable}">
> <div style="overflow-x:scroll;">
> <table class="source">
> <thead>
> <tr>
> <th colspan="3">${coberturaResult.relativeSourcePath}</th>
> </tr>
> </thead>
> ${coberturaResult.sourceFileContent}
>
> </table>
> </div>
> </j:when>
> <j:otherwise>
> <p>
> <i>Source code is unavailable</i>
> </p>
> </j:otherwise>
> </j:choose>
> </j:if>
>
> <j:forEach var="element" items="${coberturaResult.childElements}">
> <j:set var="childMetrics"
> value="${coberturaResult.getChildMetrics(element)}"/>
> <table width="100%"><TD class="bg2" colspan="2">Coverage Breakdown by
> ${element.displayName}</TD></table>
> <table border="1px" class="pane sortable">
> <tr>
> <td>Name</td>
> <j:forEach var="metric" items="${childMetrics}">
> <td>${metric.name}</td>
> </j:forEach>
> </tr>
> <j:forEach var="c" items="${coberturaResult.children}">
> <j:set var="child" value="${coberturaResult.getChild(c)}"/>
> <tr>
>
> <td>
> ${child.xmlTransform(child.name)}
> </td>
> <j:forEach var="metric" items="${childMetrics}">
> <j:set var="childResult" value="${child.getCoverage(metric)}"/>
> <j:choose>
> <j:when test="${childResult!=null}">
> <td data="${childResult.percentageFloat}">${childResult.percentage}%
> (${childResult})
> </td>
> </j:when>
> <j:otherwise>
> <td data="101">N/A</td>
> </j:otherwise>
> </j:choose>
> </j:forEach>
> </tr>
> </j:forEach>
> </table>
> </j:forEach>
> </j:if>
> <BR/>
> </j:if>
>
> <!-- CONSOLE OUTPUT -->
>
> <j:getStatic var="resultFailure" field="FAILURE"
> className="hudson.model.Result"/>
> <j:if test="${build.result==resultFailure}">
> <TABLE width="100%" cellpadding="0" cellspacing="0">
> <TR><TD class="bg1"><B>CONSOLE OUTPUT</B></TD></TR>
> <j:forEach var="line" items="${build.getLog(100)}"><TR><TD
> class="console">${line}</TD></TR></j:forEach>
> </TABLE>
> <BR/>
> </j:if>
>
> </BODY>
> </j:jelly>
>
> Hope this helps.
> -Kamal.
>
> ------------------------------
> *From:* Sven Finsterwalder <[email protected] <javascript:>>
> *To:* [email protected] <javascript:>
> *Sent:* Wednesday, September 19, 2012 7:00 AM
> *Subject:* Re: Show JUnit test results in email notifications
>
> what is the correct to get the stack trace?
> 1) failed_test.errorStackTrace
> or
> 2) failed_test. getErrorStackTrace()
>
> I try it with the second and it does not work :-(
> JellyException: Could not parse Jelly script : null
>
>
> Am Donnerstag, 13. Oktober 2011 13:27:12 UTC+2 schrieb Maxime Lemanissier:
>
> I'm also interested in this topic.
> I make it work with failed_test. getErrorStackTrace()
> But the output is not really adapted, I would like to get only the
> assertion
> error. Is there a way to do this?
> I tried failed_test. getErrorStackTrace(10) (I guessed such a method, as
> for
> build.getLog(100) would exist) but it does not work.
> The problem is I don't know how to match jelly queries with objects
> available in Jenkins model. Maybe a method getAssertionError() is available
> for failed_test, but as I don't know which object it is, I can only make
> guess...
> In fact, I have exactly the same problem than
> http://jenkins.361315.n4. nabble.com/Request-for-more-
> email-ext-jelly-templates- examples-td3038571.html
> <http://jenkins.361315.n4.nabble.com/Request-for-more-email-ext-jelly-templates-examples-td3038571.html>
> How can objects be matched between jelly script and Jenkins model?
> Are there others examples than the 2 templates provided in the email ext
> plugin page?
> Thx
> --
> View this message in context: http://jenkins.361315.n4.
> nabble.com/Show-JUnit-test- results-in-email- notifications-
> tp3898704p3901191.html
> <http://jenkins.361315.n4.nabble.com/Show-JUnit-test-results-in-email-notifications-tp3898704p3901191.html>
> Sent from the Jenkins users mailing list archive at Nabble.com
> <http://nabble.com/>.
>
>
>
>
--
You received this message because you are subscribed to the Google Groups
"Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/jenkinsci-users/501d43eb-3250-444f-a60b-6369bdaf6678%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.