Jenkins 作业中的 Groovy 多行变量替换错误

问题描述 投票:0回答:1

我有一个 jenkins 作业阶段,我将 shell 命令定义为多行字符串,根据传递的输入,变量必须被替换,并且命令在 jenkins 作业阶段执行。

代码示例

def command = """
python3 test.py --key1=$value1 \
--key2=${value2}01-test-env \
--key3=list:${value3}
"""
def exitCode = sh(script: command, returnStatus: true)

我收到意外字符错误和错误替换的错误,尝试使用转义分隔符和美元斜杠字符串。

jenkins groovy jenkins-pipeline jenkins-groovy
1个回答
0
投票
def command = """
python3 test.py --key1=$value1 \  <<<< these are a problem
--key2=${value2}01-test-env \
--key3=list:${value3}
"""

所以你必须记住,我们在编写 shell 代码时是在 Groovy 中,并且

\
字符用于字符串中的转义序列。 因此,单个
\
字符 Groovy 将其解释为转义序列,该序列后面缺少一个字母,例如
\n
\t
。 但是,您希望底层 shell 命令所需的字符串中有一个
\
。 因此,将您的
\
换成它的转义序列
\\
。 所以你的代码应该是:

def command = """
python3 test.py --key1=$value1 \\
--key2=${value2}01-test-env \\
--key3=list:${value3}
"""

这应该可以解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.