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 <sab...@gmail.com <javascript:>> > *To:* jenkins...@googlegroups.com <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 jenkinsci-users+unsubscr...@googlegroups.com. 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.