J'essaie de créer une tâche avec une fonction à l'intérieur:
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')
}
}
Mais cela me donne une exception: Java.lang.NoSuchMethodError: Aucune méthode DSL de ce type 'BuildAndCopyMibsHere' trouvée parmi les étapes
Est-il possible d'utiliser des fonctions intégrées dans le script Pipline?
Tout d'abord, vous ne devriez pas ajouter $
lorsque vous êtes en dehors des chaînes ($class
dans votre première fonction étant une exception), il devrait donc être:
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)
}
...
Maintenant, quant à votre problème; la deuxième fonction prend deux arguments alors que vous ne fournissez qu'un seul argument lors de l'appel. Soit vous devez fournir deux arguments lors de l'appel:
...
node {
stage('Prepare Mib'){
BuildAndCopyMibsHere('project1', null)
}
}
... ou vous devez ajouter une valeur par défaut au second argument des fonctions:
def BuildAndCopyMibsHere(projectName, params = null) {
build job: project, parameters: params
doCopyMibArtefactsHere($projectName)
}
Résolu! L'appel build job: project, parameters: params
échoue avec une erreur Java.lang.UnsupportedOperationException: must specify $class with an implementation of interface Java.util.List
quand params = [:]
. Le remplacer par params = null
résolu le problème. Voici le code de travail ci-dessous.
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')
}
}