Pour compléter le tutoriel sur Jenkins où je vous explique comment l’utiliser pour exécuter des tâches planifiés et donc le transformer en ordonnanceur, je vais vous montrer dans ce tutoriel, comment exécuter des scripts PowerShell.
Le problème de Double-Hop
Si vous avez suivi le premier tutoriel, je vous ai montré comment exécuter des cmdlet PowerShell « simple ».
Si l’on souhaite exécuter des commandes ou des scripts plus complexe, on se trouve confronter au problème Double-Hop , ce problème n’est pas lié à Jenkins mais à l’utilisation de session distante en PowerShell.
Si vous souhaitez plus d’information sur ce sujet, je vous invite à lire cet article (en anglais) : PowerShell Remoting and the “Double-Hop” Problem – Microsoft Tech Community
Pour résoudre ce problème, il faut passer une commande sur le serveur Jenkins :
Enable-WSManCredSSP -Role Client -DelegateComputer *
Sur chaque serveur où l’on souhaite executer des scripts PowerShell, il faut passer la commande suivante :
Enable-WSManCredSSP -Role Server
Exécuter des scripts PowerShell avec Invoke-Command avec Jenkins
Maintenant, on va voir comment exécuter des scripts PowerShell à l’aide de la commande Invoke-Command.
En fonction du paramètre passer à la cmdlet Invoke-Command on peut :
- Exécuter un bloc de script pour cela il faut utiliser le paramètre
-ScriptBlock
. - Exécuter un fichier .ps1 qui contient le script , il faut utiliser le paramètre
-FilePath
.
Avant de vous montrer dans Jenkins comment faire, voici comme va se présenter le code à mettre.
Que ce soit pour un block de script ou un fichier, il faut dans un premier temps déclarer la connexion distante :
Ci dessous un block de script :
Comme vous pouvez le voir, après
Invoke-Command
, on utilise le paramètre-ScriptBlock
, ensuite le code PowerShell et on termine avec le paramètre-Session
qui prend la variable contenant la session distante$RemoteSession
.
Pour exécuter un script PowerShell (.ps1), déposer le fichier sur le serveur Jenkins et ensuite utiliser Invoke-Commad pour exécuter le script.
Comme vous pouvez le voir, après
Invoke-Command
, on utilise le paramètre-FilePath
, qui prend comme valeur l’emplacement du script sur le serveur Jenkins et on termine avec le paramètre-Session
qui prend la variable contenant la session distante$RemoteSession
.
Afin que vous puissiez vous représenter dans Jenkins ce que cela donne voici une capture d’un block de script et d’un script au format .ps1. . Dans la partie Build, il faut configurer une commande PowerShell.
Vous savez maintenant comment exécuter des scripts « complexe » PowerShell avec Jenkins.