我正在使用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将powershell脚本称为windows批处理任务。
powershell "& {&('C:\Program Files (x86)\Jenkins\jobs\MyJob\workspace\crconfig\deploymentscript\Deploy.ps1') -targetEnvironment $Env:EnvironmentParam; exit $lastexitcode }"
我不确定在我的情况下是否真的需要这个?
答案 0 :(得分:1)
因此,在这种情况下,问题是由于“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正确运行脚本并报告错误并在脚本失败时停止构建。
答案 1 :(得分:0)
我做了两件事来解决问题:
1)将powerscript“c:\ Users \\ Documents \ WindowsPowerShell \ profile.ps1”的路径附加到系统属性的路径变量。
2)打开具有管理权限的Powershell并执行:“Set-ExecutionPolicy Unrestricted”
然后重启windows机器。当我把它重新连接到jenkins时,我的powershell工作正常。