Jenkins 管道 shell 输出不符合预期

Jenkins pipeline shell output not as expected

我能知道我哪里做错了吗?该文件不在服务器中,但是每次我执行它时都会转到 true statement

pipeline {
   agent any

   stages{

       stage('Test') {
           steps{
                script{
                        hasWar = sh(returnStdout: true, script: 'sshpass -p ${password} ssh ${username}@123.12.32.33 \'if [ -f /home/nityo/warFile1.war ]; then echo true; else echo false; fi\'')
                        if (hasWar) {
                            echo 'Has war'                            
                        } else {
                            echo 'No war files' 
                        }
                    }
            }
       }
   }
}

假设脚本部分在预期条件下将 truefalse 回显到控制台,还有一件事您没有考虑到。在 Groovy 中,当在 boolean 变量的上下文中使用时,每个非空字符串的计算结果为 true。它被称为 Groovy Truth

如果要将字符串值 false 计算为适当的 boolean 值,则必须使用 toBoolean() 方法,如果 returns false字符串值存储 false 文字,如果它存储 true 文字,则 true

https://docs.groovy-lang.org/latest/html/groovy-jdk/java/lang/String.html#toBoolean()

此外,考虑将 trim() 添加到 sh() 步骤,以便在将输出存储在 hasWar 变量下时从输出中删除所有空格。

pipeline {
   agent any

   stages{

       stage('Test') {
           steps{
                script{
                        hasWar = sh(returnStdout: true, script: 'sshpass -p ${password} ssh ${username}@123.12.32.33 \'if [ -f /home/nityo/warFile1.war ]; then echo true; else echo false; fi\'').trim()
                        if (hasWar.toBoolean()) {
                            echo 'Has war'                            
                        } else {
                            echo 'No war files' 
                        }
                    }
            }
       }
   }
}