【发布时间】:2021-09-30 14:24:38
【问题描述】:
我正在使用 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 中的变量 status 中?
推荐中的建议,如果我尝试这样做:
balena ssh <UUID> 'balena exec <container> nosetests tests/'
我收到以下错误:
Could not find a service balena exec <container> nosetests tests/ on device <UUID>.
【问题讨论】:
-
在命令链中,如“echo 'balena exec
nosetests tests/;exit;' | balena ssh " 您将收到最新执行命令的状态。在本地 PC 上,它仍然是“balena ssh”(不管它是什么)。在远程 PC 上它将是“退出” -
你可以使用
balena ssh <UUID> 'balena exec <container> nosetests tests/'吗?我相信这可能会解决您的问题(无需退出 -> 返回码现在是balena exec命令之一)