我在使用Jenkins的管道中工作。
我想在设备中运行的docker容器中运行一些测试,使用ssh和以下命令:
echo 'balena exec <container> nosetests tests/ ;exit;' | balena ssh <UUID>我遇到的问题是,即使测试失败,ssh命令的状态码也将为0,因为代码已经执行。
如果我打印每次执行的状态代码:
echo 'balena exec <container> nosetests tests/: echo $? ;exit;' | balena ssh <UUID>; echo $?我得到的输出是:
1表示第一个回声,0表示第二个回声。
这就是我如何编写Jenkins执行和检索状态代码的阶段:
stage('stage name'){
agent { node { label 'master' } }
steps{
script {
status = sh(script: 'echo "balena exec <container> nosetests tests/; exit;" | balena ssh <UUID>', returnStdout:true)
}
}
} 如何获取在设备内部获取的状态,并将其放入jenkins中的变量状态?
A建议,如果我试着做的话:
balena ssh <UUID> 'balena exec <container> nosetests tests/'我得到以下错误:
Could not find a service balena exec <container> nosetests tests/ on device <UUID>.发布于 2021-10-01 19:09:02
当您使用两个或多个命令并在它们之间使用管道时:
$?包含最后一个命令PIPESTATUS数组包含所有命令的所有返回代码
因此,在:
echo .... | ssh ...PIPESTATUS包含echo和ssh的返回代码。
${PIPESTATUS[0]}包含echo返回代码包含ssh返回代码如果您想读取多个值:
(第一次读取阵列拷贝时读取阵列拷贝)
echo .... | ssh ...
PIPESTATUS_COPY=(${PIPESTATUS[@]})
echo "PIPESTATUS[0]=${PIPESTATUS_COPY[0]}"
echo "PIPESTATUS[1]=${PIPESTATUS_COPY[1]}"https://stackoverflow.com/questions/69393940
复制相似问题