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

标签 powershell jenkins jenkins-plugins

我正在使用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/

    相关文章:

    Powershell 默认参数集不起作用。错误

    maven - Jenkins :从神器部署 war 文件

    html - 如何使用PowerShell在新窗口中引用框架中的内容?

    azure - 在azure中禁用子网之间的通信

    java - 使用修订属性构建一个模块的 Maven 问题

    tomcat - 由于 Jenkins 屏幕上未显示经理凭据(构建后操作),Jenkins 作业失败

    c++ - 使用 QT 项目 Cppcheck 进入 Jenkins

    jenkins - 在哪里设置 -Dorg.jenkinsci.plugins.durabletask.BourneShellScript.HEARTBEAT_CHECK_INTERVAL=300

    api - 通过 API 获取 Jenkins Metrics 数据

    azure - Get-AzADUser 按邮件字段中的域进行过滤