问题描述
在Jenkins作业中设置了一个参数payload
,并将其值设置为test\ntest
。用户的Jenkins脚本如下所示:
def hardset = "test\ntest"
echo "param:"
def cleanParam = jenkinsParam.replaceAll("[\\n\\t ]","Yes");
echo cleanParam
echo "----------"
echo "hardset:"
def cleanHardset = hardset.replaceAll("[\\n\\t ]","Yes");
echo cleanHardset
输出结果如下(为了简化,删除了Jenkins流水线的输出):
test\ntest
param:test\ntest
----------
hardset:testYestest
用户想知道为什么读取Jenkins参数和在脚本中设置参数有所不同。
实际上,用户试图替换来自Lambda负载的麻烦的\n
,但这给他的计划带来了麻烦。
用户尝试在脚本中使用def hardsetParam = jenkinsParam
来设置参数,但不幸的是,这似乎也不起作用。
回答中提到,用户可以尝试使用echo hardset
来查看其行为是否与回答中所述相似。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
根据回答中提到的情况,jenkinsParam
存储的是转义特殊字符后的输出。实际上,jenkinsParam
的值是"test\\ntest"
,而不是用户所期望的"test\ntest"
。
为了替换存储在jenkinsParam
中的payload
(即第二种情况的行为),需要将字符串中的完整\\n
替换为另一个字符。以下是一个示例:
output = jenkinsParam.replaceAll('\\\\n', 'yes')
print output
在上面的示例中,我们使用replaceAll
函数将字符串中的\\n
替换为yes
。这将输出testyestest
。
请注意,由于Groovy中的字符串转义规则,我们需要使用\\\\n
来匹配\\n
。
方案2
请注意以下操作注意版本差异及修改前做好备份。
另一种方法是使用正则表达式替换字符串中的\n
。以下是一个示例:
output = jenkinsParam.replaceAll(/\\n/, 'yes')
print output
在上面的示例中,我们使用正则表达式/\\n/
将字符串中的\n
替换为yes
。这将输出testyestest
。
请注意,正则表达式中的\
需要使用\\
进行转义。
以上是两种替换\n
的方法,你可以根据自己的需求选择其中一种。
希望这些解决方案能帮助到你!