繁体   English   中英

jenkins 上 windows。 声明性管道 jenkinsfile。 如何设置和获取正确的变量值

[英]jenkins on windows. Declarative pipeline jenkinsfile. how to set and get correct variable values

我使用 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 在 bat 部分中,它假设从 %errorlevel% 中获得值 0 在脚本部分中,它假设在 echo "My_build_result ${env.My_build_result}" 中获得值 2 但我得到打印7 (它进入 if 句中)

如何定义可以在 bat"""""" 和脚本 """ """ 部分中设置值的变量,并且在其他阶段和帖子 { always {.. }} 中熟悉结束???

顺便说一句:添加 env.before My_build_result (env.My_build_result ) 不起作用 非常感谢

在第一个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调用中,第一个错误是调用trim()方法。 bat步骤的结果类型为Integer ,当returnStatus: true被传递时。 trim()方法仅在returnStdout: true传递时可用,在这种情况下,结果类型将为String 第二个错误是在退出代码值周围使用括号。 固定代码应如下所示:

My_build_result = bat returnStatus: true, script: "exit 2"
// My_build_result now equals 2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM