Jenkins groovy.lang.MissingPropertyException:没有这样的属性 Bash

swe*_*ere 6 bash groovy jenkins

运行执行 bash shell 的 Jenkins Groovy Piepline 脚本时,回显时找不到本地设置的变量。

它报告错误 -

groovy.lang.MissingPropertyException: No such property: md5Value for class: WorkflowScript
Run Code Online (Sandbox Code Playgroud)

任何想法/指针将不胜感激。

#!groovy

node {

    try {

      stage('Test-Echo') {

          sh """
                #!/usr/bin/env bash

                md5Value='y'

                echo 'md5Value : ${md5Value}'

           """
       }

    } catch (e) {
        println (e.getMessage())
    }
}
Run Code Online (Sandbox Code Playgroud)

回复评论1

是的,我尝试了这些不同的排列,都报告相同的错误。

echo 'md5Value : ${md5Value}'
echo "md5Value : ${md5Value}"
echo 'md5Value : ' ${md5Value}
echo "md5Value : " ${md5Value}
echo 'md5Value :  $md5Value'
echo 'md5Value : ' $md5Value
echo "md5Value :  $md5Value"
echo "md5Value : " $md5Value
Run Code Online (Sandbox Code Playgroud)

如果异常在本地处理,则会产生错误 -

hudson.AbortException: script returned exit code 1
Run Code Online (Sandbox Code Playgroud)

回复评论2

通过将变量更新为

echo 'md5Value : " \${md5Value}
Run Code Online (Sandbox Code Playgroud)

现在产生错误

hudson.AbortException: script returned exit code 126 //: Permission denied
Run Code Online (Sandbox Code Playgroud)

swe*_*ere 0

解决方法

因此,解决方法是将 bash shell 放入其自己的脚本中,然后局部变量分配的工作方式如下所示 -

#!groovy

node {

    try {

      stage('Test-Echo') {
          
        git poll: true,
          branch: "develop",
          credentialsId: 'xxx',
          url: 'https://yyy.org/here/and-there.git'

    
        sh """
            chmod +x ./jenkins/test/echo-test.sh
            
            ./jenkins/test/echo-test.sh
            
            exit "\${?}"
            
        """

       }
    } catch (e) {
        println (e.getMessage());
    }
}
Run Code Online (Sandbox Code Playgroud)

和 bash 脚本

#!/bin/bash

md5Value="y"

echo "md5Value : ${md5Value}"
Run Code Online (Sandbox Code Playgroud)