簡體   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