gpt4 book ai didi

variables - window 上的 Jenkins 。声明式管道 jenkinsfile。如何设置和获取正确的变量值

转载 作者:行者123 更新时间:2023-12-04 17:29:12 28 4
gpt4 key购买 nike

我使用 Jenkinsefile 文件来运行阶段。它在安装在 Windows 上的 Jenkins 管道中,声明式管道。

一开始我是这样的:

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在脚本部分中,它应该得到值 2但在 echo "My_build_result ${env.My_build_result}"中,我打印了 7(它进入 if 句子)

如何定义可以在bat中设置值的变量""" """并在脚本“””"""舞台部分并熟悉其他阶段和最后的帖子 { always { .. }} ???

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

最佳答案

在第一个 bat 调用中,您仅在批处理脚本环境中设置环境变量。通过 set 分配的环境变量值不会在脚本结束时保留。将它们想象成局部变量。只需使用 returnStatus: true 即可返回 ERRORLEVELlast 值。此处的批处理脚本中无需使用 %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

关于variables - window 上的 Jenkins 。声明式管道 jenkinsfile。如何设置和获取正确的变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61169794/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com