我有一个Azure Release管道,它只是将微服务的Helm Chart部署到k8s集群。我正在尝试使用sed命令通过模式匹配来修改请求和限制的值。我已经在本地测试了它,它可以工作,甚至在bash任务中运行它,并在Helm升级任务之前检查cat
文件,并且正确完成。
例如,如果values.yaml文件包含以下块
resources:
limits:
cpu: 4000m
memory: 4000Mi
requests:
cpu: 2000m
memory: 1500Mi
字符串
我运行这个:
sed -e '/limits:/,/requests:/ s/\(cpu: \)[^ ]*/\12000m/' -e '/limits:/,/requests:/ s/\(memory: \)[^ ]*/\12000Mi/' -e '/requests:/,/limits:/ {s/\(cpu: \)[^ ]*/\1900m/; s/\(memory: \)[^ ]*/\1900Mi/;}' values.yaml
型
结果是这样的
resources:
limits:
cpu: 2000m
memory: 2000Mi
requests:
cpu: 900m
memory: 900Mi
型
问题是,在helm upgrade
任务之后,我再次尝试cat文件,发现它没有改变,原始版本仍然存在。我检查了所有任务中的路径,它是正确的。
我尝试使用多个echo命令
echo -e "resources:" >> values.yaml
echo -e " limits: \n cpu: 2000m\n memory: 2000Mi" >> values.yaml
echo -e " requests: \n cpu: 900m\n memory: 900Mi" >> values.yaml
型
居然还能用我不知道为什么
sed命令在Azure Release Pipelines中无法正常工作的原因是什么?
编辑:需要使用-i
标志,效果很好!
1条答案
按热度按时间7kqas0il1#
沿着解决方案,并为社区提供解释
在
sed
命令中使用-i
标志是修改文件的正确方法,并确保后续的helm upgrade
任务能够获取更改。-i
标志告诉sed
就地编辑文件,这意味着直接对文件进行更改,而不是输出到控制台。如果没有-i
标志,sed
所做的更改仅输出到控制台,而不会保存到文件。因此,修复方法是
字符串
这里,
-i
标志用于修改values.yaml
文件。然后,sed
命令用于修改文件的limits
和requests
部分的cpu
和memory
值。