Executing powershell command directly in jenkins pipeline

匿名 (未验证) 提交于 2019-12-03 02:05:01

问题:

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 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.


回答2:

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

The documentation mention 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.



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