在Jenkins管道的Shell中访问Groovy变量

时间:2019-04-10 19:05:18

标签: jenkins groovy jenkins-pipeline jenkins-groovy

这个answer对我没有帮助

下面是groovy中的方法:

def analyze(repoName){

        result= sh (
                    script: '''
                            cd ${WORKSPACE}/${BUILD_NUMBER}
                            cat > sonar-project.properties << EOF_$$
sonar.projectKey=ABC-$repoName
sonar.projectName=ABC
sonar.projectBaseDir=${WORKSPACE}/${BUILD_NUMBER}
EOF_$$
                            ''',
                    returnStatus: true
                    ) == 0
        print "Creating file - Return status: ${result}"
  }

下面的行给出了错误:

sonar.projectKey=ABC-$repoName

属性文件的创建是通过条目sonar.projectKey=ABC-


如何在sh()步骤中使用groovy变量?

2 个答案:

答案 0 :(得分:2)

对于字符串插值,应使用双引号,因此只需将'''替换为"""

然后将EOF_$$更改为EOF_\$\$

答案 1 :(得分:1)

对于字符串插值,您应该在双引号处加上$,将\$转义为以下位置:

  • ${WORKSPACE}${BUILD_NUMBER},您打算将它们用作bash环境变量,而不是常规变量
  • EOF_$$,您打算使用它的字面意思

更改的代码:

def analyze(repoName){

        result= sh (
                    script: """
                            cd \${WORKSPACE}/\${BUILD_NUMBER}
                            cat > sonar-project.properties << EOF_\$\$
sonar.projectKey=ABC-$repoName
sonar.projectName=ABC
sonar.projectBaseDir=\${WORKSPACE}/\${BUILD_NUMBER}
EOF_\$\$
                            """,
                    returnStatus: true
                    ) == 0
        print "Creating file - Return status: ${result}"
  }
相关问题