Замена строки переменной в Jenkinsfile с помощью команды SED - PullRequest
0 голосов
/ 14 октября 2019

У меня есть Jenkinsfile, в котором я получаю значение из консоли AWS;и сохранение в переменной my_es_host, и в моем файле terraform.tfvars есть параметр, т.е. es_host="". Я пытаюсь вставить значение переменной my_es_host в файл terraform. Ниже приведена команда sed, которую я использую в Jenkinsfile:

sh 'sed -i "s/es_host=\"\"/es_host=\"$my_es_host\"/g" terraform.tfvars

Это работает, как и ожидалось, в терминале Linux. Однако эта команда sed не работает в Jenkinsfile. Может ли кто-нибудь помочь мне в этом, пожалуйста?

1 Ответ

1 голос
/ 14 октября 2019

Я считаю, что ничто не подставляется, потому что оно может не соответствовать шаблону. Дженкинс сам по себе будет использовать одну обратную косую черту в кавычках, поэтому вам нужно удвоить их, например:

pipeline {
    agent any
    environment {
        my_es_host = 'whatever'
    }
    stages {
        stage('sed') {
            steps {
                sh 'echo es_host=\\"\\" > terraform.tfvars'
                sh 'cat terraform.tfvars'
                sh 'sed -i "s/es_host=\\"\\"/es_host=\\"$my_es_host\\"/g" terraform.tfvars'
                sh 'cat terraform.tfvars'
            }
        }
    }
}

Вывод:

[Pipeline] sh
+ echo es_host=""
[Pipeline] sh
+ cat terraform.tfvars
es_host=""
[Pipeline] sh
+ sed -i s/es_host=""/es_host="whatever"/g terraform.tfvars
[Pipeline] sh
+ cat terraform.tfvars
es_host="whatever"
...