2017-02-10 22 views
9

私は内部の機能とタスクを作成しようとしています:Jenkins Pipelineの設定で関数を定義して使用する方法は?

def doCopyMibArtefactsHere(projectName) { 
    step ([ 
     $class: 'CopyArtifact', 
     projectName: projectName, 
     filter: '**/**.mib', 
     fingerprintArtifacts: true, 
     flatten: true 
    ]); 
} 

def BuildAndCopyMibsHere(projectName, params = [:]) { 
    build job: project, parameters: params 
    doCopyMibArtefactsHere(projectName) 
} 


node { 
    stage('Prepare Mib'){ 
     BuildAndCopyMibsHere('project1') 
    } 
} 

しかし、これは私に例外gves:java.lang.NoSuchMethodErrorの:ステップ

間が見つかりません、このようなDSL方式「BuildAndCopyMibsHere」を

Piplineスクリプト内に埋め込み関数を使用する方法はありますか?

答えて

8

まずあなたは、文字列の外にいるとき、あなたは$を追加してはいけません(例外は、あなたの中に$classそれがあるべきよう、第一の機能だです:今

def doCopyMibArtefactsHere(projectName) { 
    step ([ 
     $class: 'CopyArtifact', 
     projectName: projectName, 
     filter: '**/**.mib', 
     fingerprintArtifacts: true, 
     flatten: true 
    ]); 
} 

def BuildAndCopyMibsHere(projectName, params) { 
    build job: project, parameters: params 
    doCopyMibArtefactsHere(projectName) 
} 
... 

、あなたの問題のようあなただけの呼び出しで一つの引数を供給している間に、第二の機能は、2つの引数をとるいずれかのあなたは、コールの2つの引数を指定する必要があります。

... 
node { 
    stage('Prepare Mib'){ 
     BuildAndCopyMibsHere('project1', null) 
    } 
} 

...またはあなたがデフォルト値を追加する必要があります関数の第2引数nt:

def BuildAndCopyMibsHere(projectName, params = null) { 
    build job: project, parameters: params 
    doCopyMibArtefactsHere($projectName) 
} 
+0

今度は、 'java.lang.UnsupportedOperationException:$ classにjava.lang.Intl java.util.List'の実装を指定する必要があります。 P.P.元のコードが修正されました - $は文字列には含まれていません。 –

+1

奇妙ですが、別の問題のようですが、スニペットジェネレータを使用してコピーアーティファクトステップを再生成してみてください。それでも問題が解決しない場合は、別の問題として新しい質問を投稿することをお勧めします。 –

-1

解決済み!params = [:]の場合、build job: project, parameters: paramsコールはエラーjava.lang.UnsupportedOperationException: must specify $class with an implementation of interface java.util.Listで失敗します。 params = nullと交換すると問題が解決しました。 ここに以下の作業コードがあります。

def doCopyMibArtefactsHere(projectName) { 
    step ([ 
     $class: 'CopyArtifact', 
     projectName: projectName, 
     filter: '**/**.mib', 
     fingerprintArtifacts: true, 
     flatten: true 
    ]); 
} 

def BuildAndCopyMibsHere(projectName, params = null) { 
    build job: project, parameters: params 
    doCopyMibArtefactsHere(projectName) 
} 
node { 
    stage('Prepare Mib'){ 
     BuildAndCopyMibsHere('project1') 
    } 
} 
+0

私の悪い、良い最後のエラーが解決した:)私は私の答えを更新しました。 –

+0

私に正しい方法を教えていただきありがとうございます) –

関連する問題