Доступ к заводной переменной изнутри оболочки в конвейере Jenkins - PullRequest
0 голосов
/ 10 апреля 2019

Этот ответ мне не помог

Ниже приведен метод в 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}"
  }

, где строка ниже выдает ошибку:

*Файл свойств 1010 *sonar.projectKey=ABC-$repoName

создается с записью sonar.projectKey=ABC-


Как использовать переменную groovy на шаге sh()?

Ответы [ 2 ]

2 голосов
/ 10 апреля 2019

Вы должны использовать двойные кавычки для интерполяции строк, поэтому просто замените ''' на """

и замените EOF_$$ на EOF_\$\$

1 голос
/ 11 апреля 2019

Вы должны использовать двойные кавычки для интерполяции строк и экранирования $ на \$ в следующих местах:

  • ${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}"
  }
...