Дженкинс на windows. Декларативный конвейер jenkinsfile. как установить и получить правильные значения переменных - PullRequest
2 голосов
/ 12 апреля 2020

Я использую файл Jenkinsefile для запуска этапов. Он находится в конвейере Jenkins, установленном в windows, Декларативный конвейер.

В начале я делаю:

pipeline {
    agent { label 'master'}
    environment {
        My_build_result       = 7
    }
....
Than
        stage('Test') {
            steps {
                echo 'Testing..'

                bat """
                cd Utils
                "C:\\Program Files\\MATLAB\\R2019b\\bin\\matlab.exe" -wait -nodisplay -nosplash -nodesktop -r "run('automatic_tests\\run_test.m');"
                echo %errorlevel%
                set /a My_build_result_temp = %errorlevel%
                set My_build_result = %My_build_result_temp%
                """     
                script {
                    My_build_result = bat(returnStatus:true , script: "exit (2)").trim()                                
                    echo "My_build_result ${env.My_build_result}"               
                    if (My_build_result != 0) {
                        echo "inside if"
                    }
                }
            }
        }

Переменная My_build_result получает значение 7 в начале Внутри секции летучей мыши она предположим, чтобы получить значение 0 из% errorlevel% Внутри раздела скрипта предполагается получить значение 2 НО в эхо-запросе "My_build_result $ {env.My_build_result}" Я получаю печать 7 (и она идет внутри предложения if)

Как определить переменную, для которой можно задать значение в разделе "bat" "" "" "и" script "" "" "" этапа, а также ознакомиться с другими этапами и в посте {всегда {..} } в конце ???

Кстати: добавить env.before My_build_result (env.My_build_result) не работает Спасибо большое

1 Ответ

0 голосов
/ 12 апреля 2020

При первом вызове bat вы устанавливаете переменную среды только внутри среды пакетного сценария. Значения переменных среды, которые назначаются через set, не сохраняются при завершении сценария. Думайте об этом как о локальных переменных. Просто используйте returnStatus: true, чтобы вернуть последнее значение ERRORLEVEL. Здесь нет необходимости использовать %ERRORLEVEL% в пакетном скрипте.

steps {
    script {
        My_build_result = bat returnStatus: true, script: """
            cd Utils
            "C:\\Program Files\\MATLAB\\R2019b\\bin\\matlab.exe" -wait -nodisplay -nosplash -nodesktop -r "run('automatic_tests\\run_test.m');"
        """
        // My_build_result now has the value of ERRORLEVEL from the last command
        // called in the batch script. 
    }
}

При втором вызове bat 1-ая ошибка - вызов метода trim(). Тип результата шага bat равен Integer, когда передано returnStatus: true. Метод trim() доступен только при передаче returnStdout: true, в этом случае тип результата будет String. Вторая ошибка заключается в использовании скобок вокруг значения кода выхода. Фиксированный код должен выглядеть следующим образом:

My_build_result = bat returnStatus: true, script: "exit 2"
// My_build_result now equals 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...