私は内部に関数を持つタスクを作成しようとしています:
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スクリプト内で埋め込み関数を使用する方法はありますか?
まず、文字列の外にいるときに$
を追加しないでください(最初の関数の例外である$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)
}
解決済み!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')
}
}