gpt4 book ai didi

powershell - jenkins无法在程序文件下执行powershell

转载 作者:行者123 更新时间:2023-12-02 23:58:44 25 4
gpt4 key购买 nike

我正在使用Jenkins进行部署。我想运行一个Powershell脚本来复制一些文件。我已经为jenkins安装了“Windows Powershell”插件,它将执行powershell脚本。我的Powershell脚本如下所示

param (
[string] $targetEnvironment,
[switch] $WhatIf,
[switch] $Compare)

try
{
#do smething here
}
catch
{
}

当我手动执行该脚本时,它运行良好。但是,在插件的输入窗口中使用以下命令运行脚本时,出现错误

enter image description here

请注意,如果我将“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 powershell插件。它将把Powershell退出代码传递给Jenkins
  • 尽早将$ErrorActionPreference设置为“停止”。当引发异常时,这将迫使Powershell停止。默认行为是报告错误,然后继续。

  • 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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com