Sadhan
Sadhan

Reputation: 15

groovy script template is failing after changing the jenkins job folder using folder plugin

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

Answers (1)

izzekil
izzekil

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

Related Questions