如何将包含单引号的参数从Jenkins传递到PowerShell?未终止的带引号字符串



在Jenkins管道的一个阶段中,我需要将参数中的值传递给脚本。有时,这些值可能包含一个单引号,这会中断运行,并且不会传递到脚本中。

sh "pwsh -file script.ps1 '${params.NAME}' '${params.DESCRIPTION}' '${params.SOMETHING}'"

即当脚本在阶段中被调用时,传递的参数可能如下所示:

'Name' 'Somebody's description' 'Something' 

正如你所看到的,它扰乱了传递的参数。它产生了一个未终止的带引号字符串的错误。正如params所建议的那样,我只需要向脚本传递3个参数。

有什么办法解决这个问题吗?在调用脚本之前,我是否应该添加另一个阶段,该脚本以可接受的方式格式化params的值以传递给PowerShell脚本?如果是,我应该如何格式化它?有其他办法解决吗?

bash的内置printf有一个%q格式的字符串,它将为您插入引号。你可以试试这样的东西:

sh -c "$(printf "%q " pwsh -file script.ps1 "${NAME}" "${DESCRIPTION}" "${SOMETHING}")"

但我不确定params是在什么时候展开的。然而,这种东西天生就很脆弱,你应该找到更好的方法。

相关内容

  • 没有找到相关文章