在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是在什么时候展开的。然而,这种东西天生就很脆弱,你应该找到更好的方法。