我在jenkins上有一个管道,它在一个stage中使用try-catch框架来尝试运行python脚本。一旦运行,python脚本要么打印一个好的值,要么打印一个坏的值并退出,这取决于输入。我的目标是稍后用它来做一个测试。因此我的要求是我需要能够区分python脚本是成功的还是使用exit('ERR_MESSAGE')终止的。
如果python运行到最后,我已经让它工作了。但是,如果python以exit命令结束,jenkinsfile正确地理解了这一点,它会跟随catch,但是它不会存储python脚本之前打印的文本,这是我所需要的。
你能帮忙吗?我做错了什么?请看下面的jenkinsfile阶段
stage('Test branch') {
steps {
script {
test_results = 'position 1'
try {
test_results = sh (
script: "python3 \${WORKSPACE}/testingjenkinsexit.py notpass",
returnStdout: true
).trim()
echo "Test results in passed test: ${test_results}"
} catch (err) {
echo "Test results in failed test numb 1: " + test_results
echo "Test results in failed test numb 2: ${test_results}"
echo err.getMessage()
println err.dump()
}
}
}
}
在上面的代码中,我使用输入“notpass”调用脚本“testingjenkinsexit.py”,因为这是python脚本将以exit结束的时候。如果我使用输入pass,那么它将正常工作,因为python不会以exit结束。
和下面的python脚本
from sys import argv
def testingjenkins(desired_output):
#print relevant test results. If at least one test failed, stop execution
if desired_output == "'pass'":
print(desired_output)
else:
print('tests did not pass')
exit('Deployement interrupted by python.')
desired_output = "'" + str(argv[1]) + "'"
if __name__ == "__main__":
testingjenkins(desired_output)
非常感谢你的帮助。
我在jenkinsfile中使用了try - catch来调用一个python脚本,该脚本输出值并可能以exit结束。('MESSAGE')如果输入错误。我希望try-catch能够处理以exit结尾的python(它对成功的作用),我希望无论是好的执行还是坏的执行(以exit结束)try-catch将能够存储python脚本打印的消息(它不做的事情)。
1条答案
按热度按时间jm81lzqq1#
我想这是预期的行为。当脚本以非零退出代码退出时,将不会返回StandardOut。如果您想获得输出而不考虑状态,您可以这样做。以下代码将合并STDOUT和STDERR,并在以
0
退出脚本时返回。这不会将执行移动到catch
块。因此,您必须添加一个条件并检查返回的消息。另一种方法是将STDOUT写入文件,然后在
catch
块中读取该文件。