Reputation: 15
<% def printStatusRecursively(cause) {
if (cause.class.toString().contains("UpstreamCause")) {
def projectName = cause.getUpstreamProject()
def number = cause.getUpstreamRun().number
upstreamJob = hudson.model.Hudson.instance.getItem(projectName)
upbuild = upstreamJob.getBuildByNumber(number)%>
<TR>
<TD>${projectName}</TD>
<TD>${upbuild.result}</TD>
<TD><A href="${rooturl}${upbuild.url}">${rooturl}${upbuild.url}</A> </TD>
</TR>
<%
for (upCause in cause.upstreamCauses) {
printStatusRecursively(upCause)
} }
}%>
<%
for (cause in build.causes)
{
printStatusRecursively(cause)
}%>
i use a grrovy script similar to the below link "https://github.com/jenkinsci/email-ext-plugin/blob/master/src/main/resources/hudson/plugins/emailext/templates/groovy-html.template". I use it part of my jenkins email-ext plugin it was succusful for many jobs, but suddenly when i moved my jobs to the a folder using folder plugin , then it started failing with this error: Exception raised during template rendering: Cannot invoke method "getBuildByNumber() on null object java.lang.NullPointerException: ".
Please some help me
Upvotes: 1
Views: 1435
Reputation: 6071
You should use jenkins.model.Jenkins.getItemByFullName(fullName)
where fullName
is a string like foldername/jobname
- a hierarchical name of a job which includes all the parent folders separated with a slash /
(like a filesystem path). getItemByFullName works both for jobs inside and outside folders.
Say I have the following structure:
Jenkins
|-Job_A
|-Folder
|-Job_B
|-Nested_Folder
|-Job_C
Code sample:
def job
def j = jenkins.model.Jenkins
//To get `Job_A`:
job = j.getItemByFullName('Job_A')
//To get `Job_B`:
job = j.getItemByFullName('Folder/Job_B')
//To get `Job_C`:
job = j.getItemByFullName('Folder/Nested_Folder/Job_C')
More info on Jenkins wiki: Hierarchical projects support
Upvotes: 2