是否可以直接在管道groovy脚本中调用PowerShell命令?在Jenkins中使用自定义作业时,我可以使用PowerShell插件调用该命令。但是在groovy脚本中没有使用它的代码片段。
我也尝试了sh()
但似乎这个命令不允许在命令中包含多行和注释。
答案 0 :(得分:22)
从Groovy-Script调用PowerShell脚本:
bat
命令。errorlevel
)变量(EXIT 1
应该导致FAILED
作业。$LastExitCode
。对于那个porpuse,我写了一个groovy方法,可以集成在任何管道脚本中:
def PowerShell(psCmd) {
psCmd=psCmd.replaceAll("%", "%%")
bat "powershell.exe -NonInteractive -ExecutionPolicy Bypass -Command \"\$ErrorActionPreference='Stop';[Console]::OutputEncoding=[System.Text.Encoding]::UTF8;$psCmd;EXIT \$global:LastExitCode\""
}
[编辑]我添加了UTF8 OutputEncoding:适用于Server 2016和Win10。[/ EDIT] [编辑]我添加了'%'掩码[/编辑]
在您的Pipeline-Script中,您可以像这样调用您的脚本:
stage ('Call Powershell Script')
{
node ('MyWindowsSlave') {
PowerShell(". '.\\disk-usage.ps1'")
}
}
使用该方法的最佳方法是,您可以在脚本中调用CmdLet
而不必执行此操作,这是最好的实践。
调用ps1定义CmdLet
,然后调用CmdLet
PowerShell(". '.\\disk-usage.ps1'; du -Verbose")
.
推迟您的脚本,以确保当脚本返回错误代码(应该首选)时您的步骤失败,如果您不关心它,请使用&
。答案 1 :(得分:12)
powershell
上宣布的USER node
步骤现在支持调用PowerShell脚本。
Jenkins blog提到它支持多行脚本。
答案 2 :(得分:0)
从2.28版的管道节点和流程插件开始,我们可以直接使用'powershell'。
Eg: powershell(". '.Test.ps1'")
答案 3 :(得分:-4)
您可以使用sh
命令,如下所示:
sh """
echo 'foo'
# bar
echo 'hello'
"""
这里支持评论。