Is it possible to call a PowerShell command directly in the pipelines groovy script? While using custom jobs in Jenkins I am able to call the command with the PowerShell Plugin. But there is no snippet to use this in the groovy script.
I also tried sh()
but it seems that this command does not allow multiple lines and comments inside the command.
To call a PowerScript from the Groovy-Script:
- you have to use the
bat
command. - After that, you have to be sure that the Error Code (
errorlevel
) variable will be correctly returned (EXIT 1
should resulting in a FAILED
job). - Last, to be compatible with the PowerShell-Plugin, you have to be sure that
$LastExitCode
will be considered. - I have notice that the 'powershell' is now available in pipeline, but since it have several issues I prefer this variant. Still waiting it works stabil.
For that porpuse I have written a little groovy method which could be integrate in any pipeline-script:
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\"" }
[EDIT] I have added the UTF8 OutputEncoding: works great with Server 2016 and Win10.[/EDIT] [EDIT] I have added the '%' mask[/EDIT]
In your Pipeline-Script you could then call your Script like this:
stage ('Call Powershell Script') { node ('MyWindowsSlave') { PowerShell(". '.\\disk-usage.ps1'") } }
The best thing with that method, is that you may call CmdLet
without having to do this in the Script, which is best-praxis.
Call ps1 to define CmdLet
, an then call the CmdLet
PowerShell(". '.\\disk-usage.ps1'; du -Verbose")
- Do not forget to use withEnv() an then you are better than fully compatible with the Powershell plugin.
- postpone your Script with
.
to be sure your step failed when the script return an error code (should be preferred), use &
if you don't care about it.
Calling PowerShell scripts is now supported with powershell
step as announced on Jenkins blog.
The documentation mention it supports multiple lines scripts.
You can use the sh
command like this:
sh """ echo 'foo' # bar echo 'hello' """
Comments are supported in here.