在jenkinsfile中转义sed语句

时间:2019-04-15 16:38:18

标签: bash shell jenkins sed jenkins-pipeline

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

我想用sed编辑舵图的Chart.yamlvalues.yaml,以匹配docker-image和chart版本的标签。 G。 2.7.1-9fa6sof8

我尝试在$VERSION$GIT_COMMIT_SHORT上加上花括号,但这没有解决。我试图用$来转义\,但随后它无法解释环境。

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

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

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

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

     

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

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

2 个答案:

答案 0 :(得分:0)

您可以像这样在三重单引号中使用sed命令:

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

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

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

答案 1 :(得分:0)

尝试gnu sed

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

我不知道真正的问题,可以在sh“ ....中使用-i进行测试。...