You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jenkins Groovy流水线中正确调用PowerShell脚本?

正确调用Jenkins流水线中PowerShell脚本的方法

你遇到的问题源于PowerShell与bat命令对引号的解析逻辑差异,直接照搬bat步骤的引号写法会导致PowerShell无法正确识别脚本路径,尤其是当路径包含空格时。

以下是几种可靠的解决方式:

方式1:使用PowerShell调用操作符& + 单引号包裹路径

这是最稳妥的写法,能兼容路径含空格的场景:

powershell "& '${env.WORKSPACE}/AssemblyUpdater.ps1'"
  • &是PowerShell的调用操作符,用于执行脚本或可执行文件
  • 单引号包裹路径,确保PowerShell将其视为完整的单个参数
  • 用${env.WORKSPACE}明确引用Jenkins环境变量,比直接写${WORKSPACE}更规范

方式2:简化写法(路径无空格时可用)

如果你的工作空间路径不含空格,也可以直接写:

powershell "${env.WORKSPACE}/AssemblyUpdater.ps1"

但不推荐这种写法,因为一旦路径出现空格就会报错。

方式3:提前拼接路径(可读性更好)

把路径提前赋值给变量,再传入powershell步骤,代码更清晰:

stage('Build') {
    when {
        anyOf {branch 'develop'}
    }
    steps {
        def updateScript = "${env.WORKSPACE}/AssemblyUpdater.ps1"
        powershell "& '$updateScript'"
        bat "AFDownload.bat"
        bat "\"${tool 'MSBuild'}\" \"${env.WORKSPACE}\"/Solution/BuildCSharp.sln /t:clean"
        bat "\"${tool 'MSBuild'}\" \"${env.WORKSPACE}\"/Solution/BuildCSharp.sln /t:build /p:Configuration=Debug"
    }
}

为什么原写法会报错?

你原来的代码powershell "\"${WORKSPACE}\"/AssemblyUpdater.ps1",在Groovy解析后会生成类似"C:/jenkins/workspace/develop_2"/AssemblyUpdater.ps1的命令,PowerShell会把引号内的部分和后面的路径拆分成两个参数,导致找不到正确的脚本文件。

内容的提问来源于stack exchange,提问作者MathewJoy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 20:56:26