![](/img/trans.png)
[英]Using bash history to get a previous command, copy it and then 'run' it but with the command commented
[英]Cannot get the previous status command in ssh bash using Jenkins
我在使用 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 $?
我获得的 output 是:
第一个回声为 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 中的变量状态?
表扬中的建议,如果我尝试这样做:
balena ssh <UUID> 'balena exec <container> nosetests tests/'
我收到以下错误:
Could not find a service balena exec <container> nosetests tests/ on device <UUID>.
当您使用两个或多个命令且它们之间带有 pipe 时:
$?
包含最后一个命令的返回码PIPESTATUS
数组包含所有命令的所有返回码所以,在:
echo .... | ssh ...
PIPESTATUS
包含echo
和ssh
的返回码。
${PIPESTATUS[0]}
包含echo
显返回码${PIPESTATUS[1]}
包含ssh
返回码如果你想读取超过 1 个值:
echo .... | ssh ...
PIPESTATUS_COPY=(${PIPESTATUS[@]})
echo "PIPESTATUS[0]=${PIPESTATUS_COPY[0]}"
echo "PIPESTATUS[1]=${PIPESTATUS_COPY[1]}"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.