Я пытаюсь получить определенные значения от ведомого устройства, выполнив такие команды оболочки, как:
git rev-parse HEAD
git config --get remote.origin.url
Метод, который я попытался написать для этого, следующий:
def executeCommand(String command) {
stdout = sh script: command, returnStdout: true
return stdout.trim()
}
Теперь, когда я пытаюсь запустить первую команду:
output = executeCommand('git rev-parse HEAD')
Я получаю ОШИБКУ:
[Running] groovy "/Users/user-a/Documents/cmd.groovy"
Caught: groovy.lang.MissingMethodException: No signature of method: cmd.sh() is applicable for argument types: (LinkedHashMap) values: [[script:git rev-parse HEAD, returnStdout:true]]
Possible solutions: is(java.lang.Object), use([Ljava.lang.Object;), run(), run(), any(), tap(groovy.lang.Closure)
groovy.lang.MissingMethodException: No signature of method: cmd.sh() is applicable for argument types: (LinkedHashMap) values: [[script:git rev-parse HEAD, returnStdout:true]]
Possible solutions: is(java.lang.Object), use([Ljava.lang.Object;), run(), run(), any(), tap(groovy.lang.Closure)
at cmd.executeCommand(cmd.groovy:2)
at cmd.run(cmd.groovy:6)
Я также пробовал:
output = command.execute().text
Но это ничего не возвращает.
У меня заканчиваются идеи о том, как запускать команды оболочки в Groovy в Jenkins и записывать результат.
ПОДРОБНЕЕ
Я работаю с общими библиотеками Jenkins. Я представил метод для моего Jenkinsfile
по имени getLatestBuildDetails()
. Этот метод определен в моей библиотеке. Одно из действий в рамках метода - локальное выполнение команд git
. Итак, чтобы запускать любую команду оболочки локально, я создал функцию executeCommand
, которая принимает фактическую команду для запуска в виде строки, выполняет ее и возвращает результат, который будет использоваться позже getLatestBuildDetails()
"git rev-parse HEAD"..execute().text
- person rohit thomas   schedule 17.08.2018.execute()
подходит для jenkins-pipeline? - person StephenKing   schedule 17.08.2018sh
- это этап Jenkins Pipelines, но остальная часть того, что вы публикуете, не Звучит не так много, как на самом деле вы используете конвейеры Jenkins. Не могли бы вы добавить более подробную информацию, где вы используете данный код? - person StephenKing   schedule 17.08.2018executeCommand
работает, только если я вызываю @NonCPS, иначе это не так. - person   schedule 17.08.2018