web-dev-qa-db-ja.com

Jenkins Pipeline config内で関数を定義して使用するにはどうすればよいですか?

私は内部に関数を持つタスクを作成しようとしています:

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

しかし、これは私に例外を与えます:Java.lang.NoSuchMethodError:そのようなDSLメソッド 'BuildAndCopyMibsHere'がステップに見つかりません

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

29
Dr.eel

まず、文字列の外にいるときに$を追加しないでください(最初の関数の例外である$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つの引数を取りますが、呼び出し時に引数を1つだけ指定します。呼び出し時に2つの引数を指定する必要があります。

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

...または、関数の2番目の引数にデフォルト値を追加する必要があります。

def BuildAndCopyMibsHere(projectName, params = null) {
    build job: project, parameters: params
    doCopyMibArtefactsHere($projectName)
}
27
Jon S

解決済み!build job: project, parameters: paramsの場合、Java.lang.UnsupportedOperationException: must specify $class with an implementation of interface Java.util.Listの呼び出しはエラーparams = [:]で失敗します。この問題を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')
    }
}
2
Dr.eel