如何在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
相关产品推荐
相关产品推荐

