从 Jenkins 管道中的 shell 访问一个 groovy 变量

Access a groovy variable from within shell in Jenkins pipeline

这个对我没有帮助

下面是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 变量?

您应该使用双引号进行字符串插值,因此只需将 ''' 替换为 """

并将EOF_$$更改为EOF_$$

您应该在以下位置用 $ 对字符串插值和转义 $ 使用双引号:

  • ${WORKSPACE}${BUILD_NUMBER},您打算将它们用作 bash 环境变量,而不是 groovy 变量
  • 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}"
  }