如何在Jenkins中设置/读取shell变量

ct2axkht  于 2023-08-03  发布在  Jenkins
关注(0)|答案(1)|浏览(216)

我正在自学Jenkins,并试图根据Test Stage的结果指导“pipeline job via declarative syntax”的执行流程,我试图通过pytest退出代码将其实现到shell变量中(* 即如果成功,则发送成功电子邮件并部署,如果失败,则发送失败电子邮件并退出脚本..*)
如果我在CLI中设置了一个新的shell变量,这在我导出时很有用。在这个Jenkins脚本中,当我收到pytest退出代码并将其分配给我的shell变量时,它似乎也可以工作。然而,在此之后,当我试图读取我刚刚设置的shell变量时,它似乎有一个null值。有什么想法吗

stage('Test') {
    steps {
        sh 'export pytestExitCode'
        sh 'echo "pytestExitCode before being assigned the pytest exit code is: "$pytestExitCode'
        sh 'pytest'
        sh 'echo "Pytest completed with exit code: "$?'
        sh 'pytestExitCode=$?'
        sh 'echo $pytestExitCode'
        sh 'echo "pytestExitCode after being assigned the pytest exit code is: "$pytestExitCode'
    }
}

字符串

rt4zxlrg

rt4zxlrg1#

Jenkins在新的shell会话中运行每个sh步骤。因此,导出的变量仅在您定义为sh步骤的参数的脚本中有效。
举例来说:

sh 'export variable=value'
sh 'echo "variable: $variable"'

字符串
将输出

[Pipeline] sh
+ export 'variable=value'
[Pipeline] sh
+ echo 'variable: '
variable:


如果您只需要shell脚本中的变量,则可以将sh步骤合并为一个sh步骤。请注意,Jenkins默认使用-xe shell标志,因此脚本执行将在第一个非零退出代码时停止。有关详细信息,请参见步骤参考。
举例来说:

sh '''
    export variable=value
    echo "variable: $variable"
'''


将输出

[Pipeline] sh
+ export 'variable=value'
+ echo 'variable: value'
variable: value


如果在其他步骤中需要该值,可以使用groovy变量。对于那些,您可以使用sh步骤的returnStatusreturnStdout参数。有关详细信息,请参见步骤参考。
举例来说:

script {
    exitCode = sh returnStatus: true, script: 'exit 3'
}
echo "$exitCode"


将输出

[Pipeline] script
[Pipeline] {
[Pipeline] sh
+ exit 3
[Pipeline] }
[Pipeline] // script
[Pipeline] echo
3


最后,有关根据阶段成功或失败有条件地执行步骤的信息,请参见pipeline或阶段post部分提供的successfailure块。
如果shell脚本失败(即返回非零退出代码),Jenkins还将stage标记为失败,并跳过失败阶段之后的阶段。因此,通常不需要手动检查退出代码。

相关问题