无法在 shell 脚本的 for 循环中访问 jenkins groovy 变量的值

无法在 shell 脚本的 for 循环中访问 jenkins groovy 变量的值

当我传递在 jenkins Groovy 脚本中声明的变量的值时,其值不会保留在远程服务器上运行的“for”循环中。奇怪的是,我能够在 for 循环之外访问远程服务器上的相同值。

这是我正在尝试使用的示例代码

#!/usr/bin/env groovy

def config
def COMMANDS_TO_CHECK='curl grep hello awk tr mkdir bc'
pipeline {

    agent {
        label "master"
    }

    stages {
            stage ('Validation of commands') {         
            steps {
                script {
                    sh """
                    #!/bin/bash
                    /usr/bin/sshpass -p passwrd ssh user@host << EOF
                    hostname

                      echo $COMMANDS_TO_CHECK ---> This is printed
                          for CURRENT_COMMAND in \$COMMANDS_TO_CHECK
                        do
                        echo ${CURRENT_COMMAND}  ---> Why This is not printed?
                        echo \${CURRENT_COMMAND} ----> Why This is not printed?
                        done
                        hostname
EOF
                        exit

"""

}
}
}
}
}

输出

[workspace@3] Running shell script
+ /usr/bin/sshpass -p passwrd ssh user@host
Pseudo-terminal will not be allocated because stdin is not a terminal.
illinsduck01
curl grep hello awk tr mkdir bc
illinsduck01
+ exit

答案1

删除 前面的反斜杠$COMMANDS_TO_CHECK,因此:

for CURRENT_COMMAND in $COMMANDS_TO_CHECK

这是因为COMMANDS_TO_CHECK它是一个 Groovy 变量并且将被 Groovy 在双引号字符串内解释。

前面也要使用反斜杠$CURRENT_COMMAND,因此:

echo \${CURRENT_COMMAND}

这是因为CURRENT_COMMAND它是一个 shell 变量,而不是 Groovy 变量,所以您不希望它在双引号字符串内被 Groovy 解释。

相关内容