<% 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;。
请帮帮我
答案 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