【发布时间】:2023-03-19 15:17:01
【问题描述】:
我有一个文件“README.txt”,其中包含以下行 -
“版本”:“1.0.0-alpha-test.7”
使用 Jenkins 流水线,我想用
替换这一行"version": "1.0.0-alpha-test.{BUILD_NUMBER}"
以下 sed 命令在我在 linux 集群上尝试时有效
sed -i -E "s#(\"version\"[ ]*:[ ]*\".+alpha-test\.)[0-9]+\"#\1${BUILD_NUMBER}#g" README.txt
使用 Jenkins 流水线无法使用相同的命令。
尝试使用以下查询,但它不起作用 -
sh """
sed -i -E "s|([\"]version[\"][ ]*:[ ]*[\"].+alpha-test\\.)[0-9]+\"|\1${BUILD_NUMBER}|g" README.txt
cat README.txt
"""
/home/jenkins/workspace/test/test-pipeline@tmp/durable-eb774fcf/script.sh: 3: /home/jenkins/workspace/test/test-pipeline@tmp/durable-eb774fcf/script.sh: 语法错误:")" 意外
【问题讨论】:
-
你说你想要
{BUILD_NUMBER}在输出中,但是你的代码试图插入${BUILD_NUMBER}——输出中应该真正出现的内容——文本{BUILD_NUMER}或shell 变量${BUILD_NUMBER}的值还是别的什么? -
语法错误 99% 是由错误的转义或没有转义引起的。在 TRIPLE QUOTES 中使用 QUOTES 通常会让你大吃一惊。用单个刻度替换它们。
"到'用于 sed 命令:sed -i -E 's|([\"]version[\"][ ]*:[ ]*[\"].+alpha-test\\.)[0-9]+\"|\1${BUILD_NUMBER}|g' README.txt cat README.txt
标签: jenkins sed jenkins-pipeline