Jenkinsfile中变量的插值

3

我现在需要帮助,因为我一直在苦苦挣扎一个简单的sed命令,需要在Jenkinsfile中调用,需要进行一些变量插值。

最好展示命令而不是大段解释:

sh "sed -i -e 's/-RELEASE/-${unixEpoch}/g' myFile"

sed 不支持这种语法,并打印出命令 s/ 没有完成。

我已经阅读了 Groovy 文档中与 String 和 GString 相关的部分,但我仍然不明白我哪里做错了?

有任何线索吗?

编辑:

我通过调用 date +%s 来获取当前时间戳以获得 unixEpoch

我打印出这个命令只是为了确保执行的内容,我发现:

sed -i -e 's/-RELEASE/-1525341883'
/g' myFile
< p >由< code >sed< /code >发送的完整错误信息为:< /p > < p >< code >sed:-e表达式#1,第22个字符:未终止的's'命令< /code >< /p > < p >我发现奇怪的是打印出的命令在中间有一个< code >\n< /code >...< /p >

我无法在Ubuntu 16.04上重现这个测试unixEpoch值为123456的问题。您能否分享一下您执行它的更多细节? - mkobit
@mkobit,我增加了更多的上下文。我认为我找到了解决方法。看起来date命令在字符串末尾添加了一个新行,导致sed崩溃... - MadJlzz
1个回答

2

date +%s 带有一个换行符,当你将其插入到生成的 sed中时,它会包含该换行符,这就解释了为什么 sed 会报错。你可以使用 ${unixEpoch.trim()} 或在使用之前修剪 unixEpoch 的值。


这正是我所期望的。非常感谢! - MadJlzz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接