You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins通过balena ssh执行容器测试无法获取正确状态码如何解决

解决方案

1. 修复balena ssh直接传命令的报错

你之前直接传命令报错是因为balena ssh默认会将UUID后的字符串识别为要进入的设备内服务名称,若要在设备的宿主机OS层面执行命令,需要添加--host参数,正确写法如下:

balena ssh <UUID> --host "balena exec <container> nosetests tests/"

这种方式下,balena ssh会直接透传远程命令的退出码,你可以直接在Jenkins的sh步骤中用returnStatus: true直接获取状态码:

stage('stage name'){
    agent { node { label 'master' } }
    steps{
        script {
            // returnStatus=true会直接返回命令的退出码
            status = sh(
                script: 'balena ssh <UUID> --host "balena exec <container> nosetests tests/"',
                returnStatus: true
            )
            // 此时status的值就是nosetests的实际退出码,1为失败0为成功
        }
    }
}

2. 沿用管道传命令写法的兼容方案

如果因为版本或其他限制不能用--host参数,可以在远程命令最后把退出码加固定前缀输出,再从本地拿到的输出中提取状态值:

stage('stage name'){
    agent { node { label 'master' } }
    steps{
        script {
            def output = sh(
                script: 'echo "balena exec <container> nosetests tests/; echo REMOTE_EXIT=\$? ;exit;" | balena ssh <UUID>',
                returnStdout: true
            ).trim()
            // 从输出中提取真实退出码
            def status = output.split('REMOTE_EXIT=')[1].trim() as Integer
        }
    }
}

内容的提问来源于stack exchange,提问作者J.C Guzman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 15:39:02