Как получить вывод команды оболочки, выполняемой с помощью переменной из Jenkinsfile (groovy)?
у меня есть что-то вроде этого на Jenkinsfile (Groovy), и я хочу записать stdout и код выхода в переменной, чтобы использовать информацию позже.
sh "ls -l"
Как я могу это сделать, тем более, что кажется, что вы не можете запустить какой-либо код groovy внутри Jenkinsfile
?
4 ответов
последняя версия трубопровода sh
шаг позволяет сделать следующее;
// Git committer email
GIT_COMMIT_EMAIL = sh (
script: 'git --no-pager show -s --format=\'%ae\'',
returnStdout: true
).trim()
echo "Git committer email: ${GIT_COMMIT_EMAIL}"
еще одна недокументированная (на данный момент) функция -.
// Test commit message for flags
BUILD_FULL = sh (
script: "git log -1 --pretty=%B | grep '\[jenkins-full]'",
returnStatus: true
) == 0
echo "Build full flag: ${BUILD_FULL}"
эти параметры, где добавлены на основе этой вопрос.
быстрый ответ:
sh "ls -l > commandResult"
result = readFile('commandResult').trim()
Я думаю, что существует запрос функции, чтобы иметь возможность получить результат шага sh, но, насколько я знаю, в настоящее время нет другого варианта.
EDIT:Дженкинс-26133
EDIT2: не совсем уверен, с какой версии, но шаги sh/bat теперь могут возвращать вывод std, просто:
def output = sh returnStdout: true, script: 'ls -l'
текущая версия конвейера изначально поддерживает returnStdout
и returnStatus
, которые позволяют получить вывод или статус от sh
/bat
действия.
пример:
def ret = sh(script: 'uname', returnStdout: true)
println ret
официальный документация.
Это пример случая, который будет иметь смысл, я считаю!
node('master'){
stage('stage1'){
def commit = sh (returnStdout: true, script: '''echo hi
echo bye | grep -o "e"
date
echo lol''').split()
echo "${commit[-1]} "
}
}