Jenkinsfile: недопустимый символ тела строки после знака доллара; решение: либо экранировать буквальный знак доллара "\ $ 5", либо заключить в скобки выражение значения - PullRequest
1 голос
/ 01 апреля 2019

Мой конвейер не работает в элементе sh "" "файла Jenkinsfile. Есть идеи, где что-то пойдет не так?

    stage('Install dependencies') {
                when { expression { return params.dependencies } } }
        steps {
            sh """
              apt-get update
                            apt-get install -y openssh-server net-tools inetutils-ping python-pip rubygems
                            apt-get install -y \
                                apt-transport-https \
                                ca-certificates \
                                curl \
                                gnupg2 \
                                software-properties-common

                            curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -

                            add-apt-repository \
                               "deb [arch=amd64] https://download.docker.com/linux/debian \
                               $(lsb_release -cs) \
                               stable"

                            apt-get update
                            apt-get install -y docker-ce docker-ce-cli containerd.io
                            curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
                            chmod +x /usr/local/bin/docker-compose
                            gem install serverspec pygmy
            """
        }
    }

Сообщение об ошибке:

WorkflowScript: 35: illegal string body character after dollar sign;
solution: either escape a literal dollar sign "\$5" or bracket the value expression "${5}" @ line 35, column 17.

1 Ответ

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

Заменить двойные кавычки """ одинарными кавычками '''.

sh '''
    apt-get update 
    //...
'''

Всякий раз, когда Groovy видит $ внутри двойных кавычек, он обрабатывает эту строку как GString и выполняет интерполяцию строки .Однако в вашем случае символ $ не используется в контексте интерполяции и не работает.В качестве альтернативы вы можете экранировать \$, но имеет смысл переключиться на строку в одинарных кавычках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...