Как вернуть строковое значение вместе с кодом выхода в пакетном режиме? - PullRequest
0 голосов
/ 14 мая 2019

Я запускаю пакетный файл из конвейера Jenkins. В командном файле у меня есть одна переменная "FailProcessList", значение которой мне нужно вернуть обратно в Jenkins и сохранить ее в переменной в конвейере Jenkins.

Для ясного понимания ниже приведен поток: -

Конвейер Jenkins -> Trigger -> Batch file -> вернуть «FailedProcessList» в> Jenkins -> Сохранить «FailedProcessList» в переменной в Jenkins.

Ниже приведен способ выхода из пакета и возврата кода ошибки Дженкинсу.

if NOT "!FailProcessList!" == "" (
        echo failed adapter is !FailProcessList!
        echo !error!
        if "!error!" neq 0 exit /b !error!

        )

Что в действительности ожидается, так это получить доступ и сохранить переменную "FailProcessList" командного файла в переменной конвейера Jenkins.

РЕДАКТИРОВАТЬ (после комментария @ AndreyG): -

Вот фрагмент того, как пакетный файл запускается из конвейера Jenkins.

Этап развертывания конвейера Jenkins: -

            stage('Deploy') {

                steps{
                sshagent(credentials: ['84b46545']) {
                def codeAndVal = sh(script:"val=ssh user@windowsserver ${params1}deploy.cmd ENV DOMAIN ${params.ADAPTERS} echo ${?},${val}", 
returnStdout: true)
                }
                    }
                            }

Ответы [ 2 ]

0 голосов
/ 14 мая 2019

записать строку в STDOUT и поймать ее у Дженкинса.

...
if "!error!" neq "0" (echo customized message) & exit /b

Если вы используете STDOUT (или «просто чтобы быть уверенным»), используйте другой поток (3 в этом примере):

...
if "!error!" neq "0" (echo customized message) 1>&3 & exit /b

в jenkins, перехватите этот вывод и присвойте его своей переменной.

0 голосов
/ 14 мая 2019

Вы можете вызвать командный файл внутри сценария оболочки, который имеет возможность вернуть значение в конвейер Jenkins. Примерно так:
def codeAndVal = sh(script:" val=your_file.bat echo ${?},${val}", returnStdout: true)

...