是否有可能直接在管道groovy脚本中调用PowerShell命令?在Jenkins中使用自定义作业时,我可以使用PowerShell插件调用该命令。但是在groovy脚本中没有使用这个片段。直接在jenkins管道中执行powershell命令
我也试过sh()
,但看起来这个命令不允许在命令里面有多行和注释。
是否有可能直接在管道groovy脚本中调用PowerShell命令?在Jenkins中使用自定义作业时,我可以使用PowerShell插件调用该命令。但是在groovy脚本中没有使用这个片段。直接在jenkins管道中执行powershell命令
我也试过sh()
,但看起来这个命令不允许在命令里面有多行和注释。
要从Groovy的脚本调用的PowerScript:
bat
命令。errorlevel
)变量将被正确返回(EXIT 1
应导致FAILED
作业)。$LastExitCode
将被考虑。对于porpuse我写这可以在任何管道,脚本集成一个小常规方法:
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:与服务器2016的伟大工程Win10 [/编辑] [编辑]我已经添加了 '%' 面具[/编辑]
在您的管道脚本,那么你可以打电话给你的脚本是这样的:。
stage ('Call Powershell Script')
{
node ('MyWindowsSlave') {
PowerShell(". '.\\disk-usage.ps1'")
}
}
与方法的最好的事情是,你可以拨打CmdLet
而不必为此在脚本,这是最好的实践。
呼叫PS1定义CmdLet
中,然后调用CmdLet
PowerShell(". '.\\disk-usage.ps1'; du -Verbose")
.
延迟您的脚本,以确保您的脚本在脚本返回错误代码(应该是首选)时失败,如果您不关心它,请使用&
。可以使用sh
命令是这样的:
sh """
echo 'foo'
# bar
echo 'hello'
"""
评论在这里的支持。
调用PowerShell脚本现在支持powershell
步骤,如Jenkins blog所公布的那样。
documentation提到它支持多行脚本。
嗨,不知道如果我在这个问题上迟了一点,我注意到默认情况下powershell支持使用-NoProfile插件,你知道有没有办法解决这个问题?我似乎无法运行我的管道,因为我需要访问PowerShell配置文件。 – jacmurphy50
在我的一个窗口节点上工作,但不在另一个窗口节点上。有什么你需要做的操作系统来启用它? –
sh命令将启动一个bash会话,也可以使用不属于PowerShell环境的windows slave。 您可以尝试'sh',其中ps.exe''或'sh'在您的管道中回显$ SHELL''。 请参阅:[链接](https://jenkins.io/doc/pipeline/steps/workflow-durable-task-step/#code-sh-code-shell-script) 请注意'ps.exe'必须安装在windows slave上。 – elou