Est-il possible d'appeler une commande PowerShell directement dans le script groovy des pipelines? Lors de l'utilisation de travaux personnalisés dans Jenkins, je suis en mesure d'appeler la commande avec le plugin PowerShell. Mais il n'y a pas d'extrait pour l'utiliser dans le script groovy.
J'ai également essayé sh()
mais il semble que cette commande n'autorise pas plusieurs lignes et commentaires à l'intérieur de la commande.
Pour appeler un script PowerShell à partir du Groovy-Script:
bat
.errorlevel
) sera correctement renvoyée (EXIT 1
devrait entraîner un travail FAILED
).$LastExitCode
seront considérées.Pour ce porpuse, j'ai écrit une petite méthode groovy qui pourrait être intégrée dans n'importe quel script de pipeline:
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] J'ai ajouté l'UTF8 OutputEncoding: fonctionne très bien avec Server 2016 et Win10. [/ EDIT] [ EDIT] J'ai ajouté le masque '%' [/ EDIT]
Dans votre Pipeline-Script, vous pouvez alors appeler votre script comme ceci:
stage ('Call Powershell Script')
{
node ('MyWindowsSlave') {
PowerShell(". '.\\disk-usage.ps1'")
}
}
La meilleure chose avec cette méthode, c'est que vous pouvez appeler CmdLet
sans avoir à le faire dans le script, qui est la meilleure pratique.
Appelez ps1 pour définir CmdLet
, puis appelez CmdLet
PowerShell(". '.\\disk-usage.ps1'; du -Verbose")
.
pour être sûr que votre étape a échoué lorsque le script renvoie un code d'erreur (devrait être préféré), utilisez &
si vous ne vous en souciez pas.L'appel de scripts PowerShell est désormais pris en charge avec l'étape powershell
comme annoncé sur blog Jenkins .
Le documentation mentionne qu'il prend en charge plusieurs scripts de lignes.