sed命令在gitlab-ci-runner中不能正常工作



我有一个yaml文件,如下所示:

airflow:
images:
test1:
fact1: value1
fact2: value2
fact3: value3
dags:
test2:
fact4: value4
fact5: value5 

我想通过在gitlab CI期间运行命令来更新fact3(value3)的值请注意,这是必需的yaml文件的一部分,而且我并不总是知道fact3的确切值。我想使用sed和awk命令更新这个值。我试过了:

# Set the path to the YAML file
yaml_file="test.yaml"
# Get the current value
current_value=$(awk '/^airflow:/,/^ *$/' $yaml_file | grep fact3 | awk '{print $2}')
# Update the value in the YAML file
sed -i "s/(^s*fact3s*:s*)$current_value/1$new_value/" $yaml_file

注意这里的new_value是一个gitlab变量。问题是,当我执行此命令时,它不会替换值。相反,它将新值与旧值附加在一起。例如,如果我的new值是"new"更新后,它显示fact3为

fact3: newvalue3

但是当我在本地执行它时,它像预期的那样工作。我想不出这个问题。

Ruby通常可用,并且有一个YAML解析器。

给出你的例子:

---
airflow:
images:
test1:
fact1: value1
fact2: value2
fact3: value3
dags:
test2:
fact4: value4
fact5: value5 

下面是一个简单的Ruby修改YAML路径值:

ruby -r yaml -e 'd=YAML.load($<.read)
d["airflow"]["images"]["test1"]["fact3"]="newvalue3"
puts d.to_yaml
' file.yaml

打印:

---
airflow:
images:
test1:
fact1: value1
fact2: value2
fact3: newvalue3
dags:
test2:
fact4: value4
fact5: value5

相关内容

  • 没有找到相关文章

最新更新