【问题标题】:Sed command not working in Jenkins PipelineSed 命令在 Jenkins 流水线中不起作用
【发布时间】: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


【解决方案1】:

最好用 perl 命令代替...

script{

old_version = (sh (returnStdout: true, script:'''old_version=`cat version.cfg |grep VERSION=|cut -d "=" -f2`
echo $old_version''')).toString().trim()

sh """

     if [ "$old_version" != $new_version ]; then
        perl -pi -e "s,$old_version,$new_version,g" version.cfg
        ##-- git push operation --##
     fi  

"""

}

【讨论】:

    猜你喜欢
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 2016-12-04
    • 2014-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    相关资源
    最近更新 更多