2016-07-04 8 views
1
 <% 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) 
}%> 

私は以下のリンク "https://github.com/jenkinsci/email-ext-plugin/blob/master/src/main/resources/hudson/plugins/emailext/templates/groovy-html.template"のようなgrrovyスクリプトを使用しています。私はそれを私のjenkinsの電子メールエクステンションプラグインの一部として使用していますが、それは多くのジョブではうまくいきましたが、突然フォルダプラグインを使用してフォルダに移動したときに、このエラーで失敗しました: テンプレートレンダリング中に例外が発生しました:メソッド "getBuildByNumber()nullオブジェクトでjava.lang.NullPointerException:"。 (ファイルシステムのパスのような)スラッシュ/で区切られ、すべての親フォルダが含まれるジョブの階層名 - フォルダプラグインを使用してjenkinsジョブフォルダを変更した後、groovyスクリプトテンプレートが失敗する

は、いくつかは fullNamefoldername/jobnameのような文字列がどこにあるか私は

答えて

1

あなたはjenkins.model.Jenkins.getItemByFullName(fullName) を使用する必要があります助けてください。 getItemByFullNameは、フォルダの内側と外側の両方のジョブで機能します。

は、私は次のような構造を持っていると言う:

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

コードサンプル:ジェンキンスwikiに

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

さらに詳しい情報:Hierarchical projects support

+0

は、同様の問題を持っていたし、これはそれを修正しました。私はこれが正解とマークされるべきだと思います。 –

関連する問題