繁体   English   中英

在jenkinsfile中转义sed语句

[英]escaping sed-statement in jenkinsfile

我正在尝试在jenkins中编写管道脚本以构建docker映像并将其通过掌舵部署到kubernetes。 图表和docker-image的版本号是SemVer,并附加了git commit-hash的缩写。 版本存储在env VERSION ,提交哈希存储在env GIT_COMMIT_SHORT

我想用sed编辑helm-chart的Chart.yamlvalues.yaml以匹配2.7.1-9fa6sof8 -image和chart版本的标签,例如2.7.1-9fa6sof8

我试图将花括号放在$VERSION$GIT_COMMIT_SHORT周围,​​但这没有解决。 我试图用\\来转义$ ,但是它不会解释envs。

用于编辑Chart.yaml的sed语句:

sh """sed -i 's/^version: .*\$/version: $VERSION-$GIT_COMMIT_SHORT/' $CHART_NAME/Chart.yaml"""

我在詹金斯看到的错误是:

sed -is / ^ version:。* $ / version:2.7.1-9fa6sof8 / $ CHART_NAME / Chart.yaml

sed:-e表达式#1,字符39:未终止的s命令

我需要带有正确转义符的语句。

您可以在三重单引号中使用sed命令,如下所示:

'''sed -i "s/^version: .*/version: $VERSION-$GIT_COMMIT_SHORT/" $CHART_NAME/Chart.yaml'''

通常,要在sed命令中插值变量,请使用双引号。 当不使用引号时,所有空格都应加引号,并且可能需要添加其他更改(取决于选项,上下文等)。

.*匹配行的所有其余部分,而$在这里是多余的。

尝试gnu sed

 sed -Ei 's!^(version: ).*$!\12.7.1-9fa6sof8!' $CHART_NAME/Chart.yaml

我不知道真正的问题,可能会在sh“ ....中使用它之前将-i进行测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM