我正在自学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'
}
}
字符串
1条答案
按热度按时间rt4zxlrg1#
Jenkins在新的shell会话中运行每个
sh
步骤。因此,导出的变量仅在您定义为sh
步骤的参数的脚本中有效。举例来说:
字符串
将输出
型
如果您只需要shell脚本中的变量,则可以将
sh
步骤合并为一个sh
步骤。请注意,Jenkins默认使用-xe
shell标志,因此脚本执行将在第一个非零退出代码时停止。有关详细信息,请参见步骤参考。举例来说:
型
将输出
型
如果在其他步骤中需要该值,可以使用groovy变量。对于那些,您可以使用
sh
步骤的returnStatus
或returnStdout
参数。有关详细信息,请参见步骤参考。举例来说:
型
将输出
型
最后,有关根据阶段成功或失败有条件地执行步骤的信息,请参见pipeline或阶段
post
部分提供的success
和failure
块。如果shell脚本失败(即返回非零退出代码),Jenkins还将stage标记为失败,并跳过失败阶段之后的阶段。因此,通常不需要手动检查退出代码。