首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用Jenkins在ssh bash中获取上一个状态命令

无法使用Jenkins在ssh bash中获取上一个状态命令
EN

Stack Overflow用户
提问于 2021-09-30 14:24:39
回答 1查看 74关注 0票数 0

我在使用Jenkins的管道中工作。

我想在设备中运行的docker容器中运行一些测试,使用ssh和以下命令:

代码语言:javascript
复制
echo 'balena exec <container> nosetests tests/ ;exit;' | balena ssh <UUID>

我遇到的问题是,即使测试失败,ssh命令的状态码也将为0,因为代码已经执行。

如果我打印每次执行的状态代码:

代码语言:javascript
复制
echo 'balena exec <container> nosetests tests/: echo $? ;exit;' | balena ssh <UUID>; echo $?

我得到的输出是:

1表示第一个回声,0表示第二个回声。

这就是我如何编写Jenkins执行和检索状态代码的阶段:

代码语言:javascript
复制
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建议,如果我试着做的话:

代码语言:javascript
复制
balena ssh <UUID> 'balena exec <container>  nosetests tests/'

我得到以下错误:

代码语言:javascript
复制
Could not find a service balena exec <container> nosetests tests/ on device <UUID>.
EN

回答 1

Stack Overflow用户

发布于 2021-10-01 19:09:02

当您使用两个或多个命令并在它们之间使用管道时:

  • $?包含最后一个命令
  • 的返回代码PIPESTATUS数组包含所有命令

的所有返回代码

因此,在:

代码语言:javascript
复制
echo .... | ssh ...

PIPESTATUS包含echossh的返回代码。

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

如果您想读取多个值:

  1. Make an array copy first
  2. Read the array copy

(第一次读取阵列拷贝时读取阵列拷贝)

代码语言:javascript
复制
echo .... | ssh ...
PIPESTATUS_COPY=(${PIPESTATUS[@]})
echo "PIPESTATUS[0]=${PIPESTATUS_COPY[0]}"
echo "PIPESTATUS[1]=${PIPESTATUS_COPY[1]}"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69393940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档