使用 SED 命令在 Jenkinsfile 中用变量替换字符串
Replacing string with variable in Jenkinsfile using SED command
我有一个 Jenkinsfile,我在其中从 AWS 控制台获取一个值;并存储在变量 my_es_host 中,我的 terraform.tfvars
文件中有一个参数,即 es_host=""
。我正在尝试在 terraform 文件中插入变量 my_es_host 的值。下面是我在 Jenkinsfile 中使用的 sed 命令:
sh 'sed -i "s/es_host=\"\"/es_host=\"$my_es_host\"/g" terraform.tfvars
这在 Linux 终端中按预期工作。但是,此 sed 命令在 Jenkinsfile 中不起作用。有人可以帮我解决这个问题吗?
我相信没有任何东西被替换,因为它可能与模式不匹配。 Jenkins 本身会消耗一个引用反斜杠,所以你需要将它们加倍,例如:
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"
另一种方法是使用 HCLQ(用于查询和操作 HashiCorp HCL 的命令行工具)这里有一些示例
cat terraform.tfvars | hclq set 'es_host' $my_es_host | tee terraform.tfvars
或者你可以得到这个值
cat terraform.tfvars | hclq get 'es_host'
我有一个 Jenkinsfile,我在其中从 AWS 控制台获取一个值;并存储在变量 my_es_host 中,我的 terraform.tfvars
文件中有一个参数,即 es_host=""
。我正在尝试在 terraform 文件中插入变量 my_es_host 的值。下面是我在 Jenkinsfile 中使用的 sed 命令:
sh 'sed -i "s/es_host=\"\"/es_host=\"$my_es_host\"/g" terraform.tfvars
这在 Linux 终端中按预期工作。但是,此 sed 命令在 Jenkinsfile 中不起作用。有人可以帮我解决这个问题吗?
我相信没有任何东西被替换,因为它可能与模式不匹配。 Jenkins 本身会消耗一个引用反斜杠,所以你需要将它们加倍,例如:
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"
另一种方法是使用 HCLQ(用于查询和操作 HashiCorp HCL 的命令行工具)这里有一些示例
cat terraform.tfvars | hclq set 'es_host' $my_es_host | tee terraform.tfvars
或者你可以得到这个值
cat terraform.tfvars | hclq get 'es_host'