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'
}
}
}
}
}
}
假设脚本部分在预期条件下将 true
或 false
回显到控制台,还有一件事您没有考虑到。在 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'
}
}
}
}
}
}
我能知道我哪里做错了吗?该文件不在服务器中,但是每次我执行它时都会转到 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'
}
}
}
}
}
}
假设脚本部分在预期条件下将 true
或 false
回显到控制台,还有一件事您没有考虑到。在 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'
}
}
}
}
}
}