Как определить несколько переменных среды из одного вывода sh-скрипта

#groovy #jenkins-pipeline

#groovy #дженкинс-конвейер

Вопрос:

Мне нужно запустить инструмент в блоке sh, который устанавливает несколько переменных среды. Затем мне нужно экспортировать эти переменные среды из шага sh в шаг withEnv, чтобы они были доступны для другого шага.

Я знаю, что мог бы выполнить что-то подобное, выполнив инструмент и ansible в одном блоке sh. Если возможно, я хотел бы использовать плагин ansiblePlaybook для выполнения этой задачи.

 stage('Example') {
    steps {
        // Run the tool that generates the eval block
        sh 'some-tool'
        // Generates output like:
        // TOKENA='foo'; TOKENB='bar'; export TOKENA; export TOKENB; echo "success"

        // This is where I need help. 
        // How to translate the script output from above into variables
        // So that I can make them available to the ansiblePlaybook step.
        withEnv([TOKENA=TOKENA, TOKENB=TOKENB]) {
            ansiblePlaybook( 
                // ... irrelevant details
            )
        }
    }
}
  

Предоставленный мной код является неполным. Я не ожидаю от этого никаких результатов.

Комментарии:

1. Это больше похоже на задание для withCredentials .

Ответ №1:

Недавно у меня возникла такая же проблема, потребовалось сохранить несколько переменных среды с использованием блока Дженкинса. withEnv Это то, что сработало для меня:

     stage('Do some hard work'){
        steps {
            withEnv(["MY_VAR_1=${VALUE_1}", "MY_VAR_2=${VALUE_2}"]) {
                script {
                    bat (
                            script: 'echo "Doing some Hard work with ${MY_VAR_1} and ${MY_VAR_2}"'
                    )
                }
            }
        }
    }
  

Ответ №2:

все, что у вас есть, — это оболочка. включая вывод из some-tool .

так почему бы не поместить это some-tool внутрь ansible ?

однако, если вы могли бы сделать some-tool вывод только как назначение токена, тогда следующий код будет работать

 def env = new ConfigSlurper().parse(" TOKENA='foo'; TOKENB='bar'; ")