【问题标题】:How to get the exit code of the failed command from remote ssh using jenkinsfile and parameterized build如何使用 jenkinsfile 和参数化构建从远程 ssh 获取失败命令的退出代码
【发布时间】:2021-07-02 21:56:55
【问题描述】:

我正在尝试使用 Jenkinsfile 构建管道以在远程服务器上执行一些操作,并希望在继续执行其他命令之前获取失败命令的退出代码。我尝试过以下方式,但即使命令执行失败或执行中有任何异常,它总是返回 0 而不是 1。

pipeline {
    agent any
    stages {
stage('stage') {
             when {
                expression {env.GIT_BRANCH == 'origin/stage'}
            }
            steps {
                echo 'build '
                ansiColor('xterm') {
                    echo 'build '
                    sh """ssh -tt server_address << EOF
                    cd /u/${DIR}
                    echo \$?
                    if [ \$? eq 1 ]; then
                        exit
                    fi
                    ls -al
                    exit
                    EOF"""
               }
            }
        }
    }
}

【问题讨论】:

    标签: ssh jenkins-pipeline pipeline remote-server


    【解决方案1】:
    echo $?
    if [ $? eq 1 ]; then
    

    第二个$? 将是前一个echo 命令的结果:很可能是0,考虑到echo 会成功。

    您需要存储第一个 $? 的输出?第一:

    cd /u/${DIR}
    res=\$?
    if [ \${res} eq 1 ]; then    
      exit 1
    fi
    

    【讨论】:

    • 我已经尝试过你的答案,但问题仍然存在 cd /u/test- -bash: cd: /u/test-: No such file or directory res=0 from given command as the directory is不可用,结果应该包含 1 作为命令的代码,因为这个命令已经失败,但它返回 0,所以我无法在失败时退出构建。
    • @HassanIqbalKhan 你能在cd之前添加set -x吗?这样,我们就可以准确地看到执行的内容及其结果。
    猜你喜欢
    • 1970-01-01
    • 2016-10-08
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-13
    • 2019-02-24
    • 1970-01-01
    相关资源
    最近更新 更多