Как определить и использовать функцию внутри конфигурации 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')
}
}
Но это дает мне исключение:
java.lang.NoSuchMethodError: Не найден такой метод DSL 'BuildAndCopyMibsHere' среди шагов *
Есть ли способ использовать встроенные функции в сценарии конвейера?
Ответы
Ответ 1
Во-первых, вы не должны добавлять $
, когда находитесь за пределами строк ($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)
}
...
Теперь, что касается вашей проблемы; вторая функция принимает два аргумента, в то время как вы предоставляете только один аргумент при вызове. Либо вы должны предоставить два аргумента при вызове:
...
node {
stage('Prepare Mib'){
BuildAndCopyMibsHere('project1', null)
}
}
... или вам нужно добавить значение по умолчанию ко второму аргументу функции:
def BuildAndCopyMibsHere(projectName, params = null) {
build job: project, parameters: params
doCopyMibArtefactsHere($projectName)
}
Ответ 2
Решено! Сбой вызова 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')
}
}