Как получить доступ к переменной, объявленной в шаге sh в Jenkinsfile? - PullRequest
1 голос
/ 11 апреля 2019

Скажи, что у меня есть Jenkinsfile. В этом Jenkinsfile есть следующий шаг sh:

sh "myScript.sh"

В myScript.sh объявлена ​​следующая переменная:

MY_VARIABLE="This is my variable"

Как я могу получить доступ к MY_VARIABLE, который объявлен в myScript.sh, из моего Jenkinsfile?

Ответы [ 2 ]

1 голос
/ 11 апреля 2019

Чтобы импортировать переменную, определенную в вашем скрипте, в текущую оболочку, вы можете использовать команду source (см. Объяснение для SU ):

# Either via command
source myScript.sh
# Or via built-in synonym
. myScript.sh

Предположим, что ваш скрипт ничего не выводит, вместо этого вы можете вывести переменную, чтобы получить ее в Jenkins:

def myVar = sh(returnStdout: true, script: '. myScript.sh && echo $MY_VARIABLE')

Если из вашего скрипта действительно выводятся данные, вы можете получить последний вывод для каждой оболочки:

(. myScript.sh && echo $MY_VARIABLE) | tail -n1

или через Groovy:

def out = sh(returnStdout: true, script: '. myScript.sh && echo $MY_VARIABLE')
def myVar = out.tokenize('\n')[-1]
0 голосов
/ 11 апреля 2019

Переменная bash, объявленная в файле .sh, заканчивается шагом конвейера: sh complete.

Но вы можете сделать .sh для создания файла свойств, а затем использовать шаг конвейера: readProperties , чтобы прочитать файл в объект для доступа.

// myScript.sh
...

echo MY_VARIABLE=This is my variable > vars.properties


// pipeline 
sh 'myScript.sh'
def props = readProperties file: 'vars.properties'
echo props.MY_VARIABLE
...