Как получить вывод команды оболочки, выполняемой с помощью переменной из 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]} "

    }
}