jenkins pipe - параметр из функции - Обязательный контекстный класс hudson.FilePath отсутствует - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь передать возвращаемое значение функции в качестве параметра.

@NonCPS
def getLastRelease() {
    def RES = sh(script: '''cat version''', returnStdout: true).trim()
    return RES
}
pipeline{
    parameters {
            choice(name: 'RELEASE_VERSION', choices: '${getLastRelease()}', description: 'desc')
        }
}

Но по какой-то причине это не работает - если я пытаюсь:

'${getLastRelease()}'

Я получаюошибка:

durable-73075a87 / script.sh: строка 1: $ {getLastRelease ()}: неправильная замена

, если я использую:

"${getLastRelease()}"

Я получаю сообщение об ошибке:

[Конвейер] Начало конвейера [Конвейер] sh [Конвейер] Конец конвейера org.jenkinsci.plugins.workflow.steps.MissingContextVariableException: Обязательный класс контекста hudson. FilePath отсутствует Возможно, вы забыли окружить код шагом, обеспечивающим это, например: node, dockerNode

1 Ответ

1 голос
/ 08 октября 2019

Вам нужно это:

  1. Удалите аннотацию @NonCPS, так как такие функции не должны внутренне использовать шаги конвейера .
  2. Поскольку вы выполняете сценарии оболочки, оберните выражения в своей функции в блок node {...}.
  3. Просто вызовите функцию getLastRelease() внутри выбора параметра без кавычек или фигурных скобок.

Workingобразец:

def getLastRelease() {
    node {
        def RES = sh (script: 'cat version', returnStdout: true).trim()
        return RES
    }
}
pipeline {
    agent any
    parameters {
        choice(name: 'RELEASE_VERSION', choices: [getLastRelease(), <more choices, ...>], description: 'desc')
    }
}
...