我正在使用Jenkins进行部署。我想运行一个Powershell脚本来复制一些文件。我已经为jenkins安装了“Windows Powershell”插件,它将执行powershell脚本。我的Powershell脚本如下所示
param (
[string] $targetEnvironment,
[switch] $WhatIf,
[switch] $Compare)
try
{
#do smething here
}
catch
{
}
当我手动执行该脚本时,它运行良好。但是,在插件的输入窗口中使用以下命令运行脚本时,出现错误
请注意,如果我将“deploymentscript”文件夹复制到“C:\ deploymentscript”,然后在插件的窗口中更改路径,则作业运行正常。
在程序文件下执行时不起作用
我得到的错误是
First time build. Skipping changelog.
[workspace] $ powershell.exe -NonInteractive -ExecutionPolicy ByPass "& 'C:\Users\CODESC~1\AppData\Local\Temp\hudson2119904511537985474.ps1'"
At C:\Users\username\AppData\Local\Temp\hudson2119904511537985474.ps1:1 char:119
+ ... etaTaskar.ps1' -targetEnvironment demo
+ ~~~~~~~~~~~~~~~~~~
Unexpected token '-targetEnvironment' in expression or statement.
At C:\Users\username\AppData\Local\Temp\hudson2119904511537985474.ps1:1 char:138
+ ... getEnvironment demo
+ ~~~~
Unexpected token 'demo' in expression or statement.
+ CategoryInfo : ParserError: (:) [], ParseException
+ FullyQualifiedErrorId : UnexpectedToken
Build step 'Windows PowerShell' marked build as failure
Finished: FAILURE
EDIT1
@petrik是的,导致问题的“Program Files(x86)”文件夹中的空间正确。解决的办法是使用以下foormat
&("C:\Program Files (x86)\Jenkins\jobs\MyJob\workspace\crconfig\deploymentscript\Deploy.ps1") -targetEnvironment demo
那行得通。
现在基于here文章,如果Powershell Scrit失败了,我也希望Jenkin的工作也失败,
所以我已经告诉Hudson从Windows批处理任务中调用Powershell脚本。
powershell "& {&('C:\Program Files (x86)\Jenkins\jobs\MyJob\workspace\crconfig\deploymentscript\Deploy.ps1') -targetEnvironment $Env:EnvironmentParam; exit $lastexitcode }"
我不确定我是否真的需要这样做?
最佳答案
因此,在这种情况下,问题是由“Program Files”路径中包含空格的事实引起的。将脚本路径放入变量中,然后可以使用call operator执行该变量。
为了确保在Powershell脚本失败时Jenkins会使构建失败,需要采取几个步骤。
Jenkins配置中的脚本可能如下所示:
$ErrorActionPreference = 'Stop'
$scriptPath = 'c:\Program Files (x86)\Jenkins\jobs\MyJob\workspace\crconfig\deploymentscript\deploy.ps1'
& $script -targetEnvironment 'demo'
这应该使Jenkins正确运行脚本并报告错误并在脚本失败时停止构建。
关于powershell - jenkins无法在程序文件下执行powershell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35780237/