Захват результатов команды sh в декларативном конвейере Jenkins - PullRequest
0 голосов
/ 14 февраля 2019

В следующем коде я пытаюсь присвоить результат 'ls -l /' глобальной переменной b, но, когда я пытаюсь распечатать то, что внутри него, результат равен null.

Как я могу установить глобальную переменную?

def b = [:]
pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                script{
                    b = sh 'ls -l /'
                    println "b:"+b
                }
            }
        }
    }
}

Это результат:

[Pipeline] // stage
[Pipeline] withEnv
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Build)
[Pipeline] script
[Pipeline] {
[Pipeline] sh
+ ls -l /
total 24
drwxr-xr-x   2 root root 4096 Jan 18 11:49 bin
drwxr-xr-x   2 root root    6 Oct 20 10:40 boot
drwxr-xr-x   5 root root  360 Jan 21 10:00 dev
drwxr-xr-x   1 root root   77 Jan 21 10:00 etc
drwxr-xr-x   2 root root    6 Oct 20 10:40 home
drwxr-xr-x   8 root root   96 Jan 18 11:49 lib
drwxr-xr-x   2 root root   34 Jan 18 11:49 lib64
drwxr-xr-x   2 root root    6 Dec 26 00:00 media
drwxr-xr-x   2 root root    6 Dec 26 00:00 mnt
drwxr-xr-x   2 root root    6 Dec 26 00:00 opt
dr-xr-xr-x 276 root root    0 Jan 21 10:00 proc
drwx------   1 root root   76 Feb 12 17:32 root
drwxr-xr-x   1 root root   21 Jan 21 10:00 run
drwxr-xr-x   2 root root 4096 Jan 18 11:49 sbin
drwxr-xr-x   2 root root    6 Dec 26 00:00 srv
dr-xr-xr-x  13 root root    0 Feb  6 02:34 sys
drwxrwxrwt   1 root root 4096 Feb 13 15:18 tmp
drwxr-xr-x   1 root root   32 Dec 26 00:00 usr
drwxr-xr-x   1 root root   39 Jan 21 10:00 var
[Pipeline] echo
b:null
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

Как видите, переменная b всегда установлена ​​на null.

1 Ответ

0 голосов
/ 14 февраля 2019

Если вы хотите правильно захватить вывод sh step , вам нужно заменить

b = sh 'ls -l /'

на

b = sh script: 'ls -l /', returnStdout: true

Поведение по умолчанию:Шаг sh заключается в том, что он выводит результат на консоль, поэтому, если вы хотите изменить его поведение, вам нужно явно установить для параметра returnStdout значение true.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...