我想在Jenkins完成构建步骤后替换文件中的一些文本。
我在我的后构建步骤中有下面的代码。
powershell.exe -Command(Get-Content "./PublishedWebsites/app.config") |
Foreach-Object {$_.replace({{MyDummValue}}, "${env.BUILD_NUMBER}")} |
Set-Content "./PublishedWebsites/app.config"
第一部分工作(Get-Content "./PublishedWebsites/app.config")
,直到管道(“|“).
在管道之后,它会抛出一个错误:内部或外部命令无法识别Foreach-Object。
我认为这与转义序列和语法有关。所以我也试过这个
"""powershell.exe -Command(Get-Content "./PublishedWebsites/app.config") |
Foreach-Object {$_.replace({{MyDummValue}}, "${env.BUILD_NUMBER}")} |
Set-Content "./PublishedWebsites/app.config"""
然后,由于某种原因,Jenkins甚至在到达后生成步骤之前就尝试计算$_.replace({{MyDummValue}}
,并向我提供错误**“无法在空对象上获取属性替换”**
所以我很茫然。我想做的就是在一个构建后的步骤中,用构建号重命名文件中的一个值。
1条答案
按热度按时间wf82jlnq1#
调用PowerShell时(或其他)脚本,请始终使用单引号(或三个单引号)字符串文字。如果使用双引号(或三重双引号)字符串,Groovy试图插入该字符串,因此您必须将
$
转义为\$
,才能按字面意思使用它。双引号字符串也容易脚本注入,当Groovy在脚本中插入管道参数时,管道用户可能会运行任意PowerShell脚本。另一个错误:值
{{MyDummValue}}
没有用引号括起来。另外,我不知道为什么要显式调用
powershell.exe
,请使用powershell
步骤: