使用Powershell从Jenkins访问环境变量

时间:2015-03-24 20:22:36

标签: regex powershell jenkins

我正在尝试在Jenkins构建过程中执行以下Powershell脚本:

Write-Host ==================================================
Write-Host Setting Version to $env:Version BEGIN
(Get-Content .\MyFile.js) -replace '"Version"\s*:\s*".*"', '"Version" : "$env:Version"' | Out-File .\MyFile.js
Write-Host Setting Version to $env:Version COMPLETE
Write-Host ==================================================

$ env:Version的第一个和最后一个实例正确替换。我看到了输出

==================================================
Setting Version to 1.2.3.4 BEGIN
Setting Version to 1.2.3.4 COMPLETE
==================================================

但$ env:Version的第二个实例在MyFile.js中没有被替换。当我打开MyFile.js时,我看到以下内容:

"Version" : "$env:Version",

如何将此环境变量传递给Get-Content命令?它是关于正则表达式(由-replace触发)阻止替换发生的吗?

1 个答案:

答案 0 :(得分:3)

你有一个单引号的字符串,不允许变量扩展。

'"Version" : "$env:Version"'   

可能是这样。我们使用反引号来逃避引号,因此解释器不会吃掉它们。也可能需要一个子表达式。

"`"Version`" : `"$($env:Version)`""

或根据Etan Reisner的解决方案

('"Version" : "{0}"' -f $env:version)

我甚至可以改进-replace以及使其更清洁。使用捕获组来保存字符串的第一部分,如$1,因为它将保持不变。使用格式运算符在$env:version中添加,因此我们不需要子表达式。

-replace '("Version"\s*:\s*)".*"',('$1"{0}"' -f $env:version)