我正在尝试在 jenkins 中编写管道脚本来构建 docker 映像并通过 helm 将其部署到 kubernetes。 图表和 docker-image 的版本号是一个 SemVer,附加了 git commit-hash 的缩写形式。 版本存储在 env VERSION
中,提交哈希存储在 env GIT_COMMIT_SHORT
中。
我想使用 sed 编辑 helm 图表的Chart.yaml
和values.yaml
以匹配 docker 映像和图表版本的标签,例如 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"""
我在 Jenkins 中看到的错误是:
sed -i s/^版本: .*$/版本: 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
我不知道真正的问题,-i
可能会在 sh"...