jenkins逃脱sed命令

ora*_*nge 10 groovy continuous-integration escaping jenkins

有人可以在Jenkins groovy脚本中为我逃脱这个sed shell命令吗?

太难了

sh ("""
sed "s/(AssemblyInformationalVersion\(\")(.*)(\")/\1${productVersion}\3/g" 
AssemblyInfoGlobal/AssemblyInfoGlobal.cs -r
""")
Run Code Online (Sandbox Code Playgroud)

Bal*_*Rog 15

三重双引号(""")字符串文字语法允许变量/表达式替换(插值),因此反斜杠(\)被解释为特殊字符"转义".由于第一个打开的paren不是这样一个特殊字符,Groovy编译失败了.如果您的意图是在结果字符串中包含文字反斜杠,则需要转义反斜杠.也就是说,使用双反斜杠(\\)替换一个文字反斜杠.

从而:

sh ("""
sed "s/(AssemblyInformationalVersion\\(\\")(.*)(\\")/\\1${productVersion}\\3/g" 
AssemblyInfoGlobal/AssemblyInfoGlobal.cs -r
""")
Run Code Online (Sandbox Code Playgroud)

  • 仅使用插件的片段生成器会更容易。https://jenkins.io/doc/book/pipeline/getting-started/#snippet-generator (2认同)
  • @walla Jenkins 代码片段生成器很方便,但是它总是使用单引号转义,这将阻止 shell 变量被扩展,即 `'''...'''` 而不是 `"""..."""`。 (2认同)

Exe*_*ero 7

因此,如果你想在String groovy变量中替换一些字符或单词,例如 "/" 替换"/"以便转义一个特殊字符,在我们的例子中它将是正斜杠,你可以使用下面的代码.

因此,之后我们将能够应用linux sed命令而不会出现错误(例如,使用sed将地方持有者值替换为.env文件中的所需值).

下面我们展示一个Jenkins Pipeline Groovy代码:

        String s = "A/B/C"
        your_variable = s.replace("/", "\\/")
        sh "sed -i -e 's/string_to_replace/${your_variable}/g' path/to/file/.env"
Run Code Online (Sandbox Code Playgroud)

注意: ${your_variable}将获取变量的内容.

验证:

echo "Your variable new content: ${your_variable}"
Run Code Online (Sandbox Code Playgroud)

结果:

Your variable new content: A\/B\/C
Run Code Online (Sandbox Code Playgroud)