使用文件夹插件更改jenkins作业文件夹后,groovy脚本模板失败

时间:2016-07-04 19:48:36

标签: jenkins groovy

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

我使用类似于以下链接&#34; https://github.com/jenkinsci/email-ext-plugin/blob/master/src/main/resources/hudson/plugins/emailext/templates/groovy-html.template&#34;的grrovy脚本。我使用它是我的jenkins email-ext插件的一部分,它对于许多工作来说很有吸引力,但突然当我使用文件夹插件将我的工作移动到一个文件夹时,它开始失败并出现此错误: 模板呈现期间引发的异常:无法在null对象java.lang.NullPointerException上调用方法&#34; getBuildByNumber():&#34;。

请帮帮我

1 个答案:

答案 0 :(得分:1)

你应该使用jenkins.model.Jenkins.getItemByFullName(fullName) 其中fullName是一个类似foldername/jobname的字符串 - 作业的分层名称,包括用斜杠/分隔的所有父文件夹(如文件系统路径)。 getItemByFullName适用于文件夹内外的作业。

说我有以下结构:

Jenkins
 |-Job_A
 |-Folder
    |-Job_B
    |-Nested_Folder
       |-Job_C

代码示例:

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

有关Jenkins wiki的更多信息:Hierarchical projects support