繁体   English   中英

无法使用 Jenkins 获取 ssh bash 中的先前状态命令

[英]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包含echossh的返回码。

  • ${PIPESTATUS[0]}包含echo显返回码
  • ${PIPESTATUS[1]}包含ssh返回码

如果你想读取超过 1 个值:

  1. 先做一个数组拷贝
  2. 读取数组副本
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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM