Executing powershell command directly in jenkins pipeline

烈酒焚心 提交于 2019-11-27 12:00:21

问题


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.


回答1:


To call a PowerShell script 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. I actually have an issue with the 'dontKillMe' behavior.

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.



回答2:


Calling PowerShell scripts is now supported with powershell step as announced on Jenkins blog.

The documentation mentions it supports multiple lines scripts.




回答3:


You can use the sh command like this:

sh """
    echo 'foo'
    # bar
    echo 'hello'
"""

Comments are supported in here.



来源:https://stackoverflow.com/questions/42436370/executing-powershell-command-directly-in-jenkins-pipeline

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!