Intégrer Git & Jenkins pour des scripts PowerShell planifiés

Si vous et votre équipe avez trop de scripts PowerShell qui traînent et qui s’exécutent n’importe où, cet article est pour vous. Dans cet article, vous allez apprendre comment configurer le populaire serveur d’automatisation Jenkins pour gérer et exécuter des scripts PowerShell!

Vous apprendrez comment intégrer le contrôle de version Git avec Jenkins pour ensuite configurer et planifier des scripts PowerShell à exécuter selon des plannings prédéfinis.

Propagation des Scripts PowerShell : Ça ne Marche Pas

En tant qu’ingénieur en automatisation, l’un des principaux défis que mon équipe et moi avons dû surmonter était la prolifération planifiée des scripts PowerShell. J’ai trouvé des dizaines de scripts PowerShell planifiés et exécutés à partir de nombreux endroits différents.

Chaque ingénieur, ou équipe d’ingénieurs, avait son propre serveur sur lequel il planifiait des tâches. Chaque type de script était exécuté sur le serveur qui exécutait ce service.

  • A domain controller ran all of the Active Directory scripts.
  • Un serveur Exchange exécutait tous les scripts Exchange.
  • A member server ran all networking team scripts.
  • A member server ran all of the database scripts for the DBAs.
  • A member server ran all of the security team’s scripts.
  • … et ainsi de suite

Tout le code qui s’exécutait sur l’un de ces serveurs était soit enregistré sous forme de fichier de script dans un répertoire temporaire sur ce serveur, soit sous forme de dossier de script sur un lecteur partagé. C’était un cauchemar!

Que vous le croyiez ou non, dans l’ensemble, ce système fonctionnait bien. Les scripts s’exécutaient comme prévu et nous avions des sauvegardes sur tous les serveurs de toute façon. Aucun code n’a jamais été perdu.

Il était compréhensible que tout le monde soit satisfait de ce statu quo. Améliorer ce système n’était pas en tête de liste des priorités.

Mais ce système n’était pas sans défauts. Bien qu’il répondait aux besoins de certains ingénieurs, il n’était pas en mesure de passer à l’échelle ou d’être facilement maintenable indéfiniment. Ce système ne permettait pas non plus une quelconque flexibilité dans les tâches planifiées. Cette rigidité a conduit à la programmation de dix versions du même script (avec de légères modifications).

Entrez Jenkins.

Pourquoi Jenkins ?

Parmi toutes les options que vous avez pour planifier et exécuter des scripts PowerShell, pourquoi choisir Jenkins ? Utiliser un serveur Jenkins pour exécuter des scripts PowerShell offre de nombreux avantages. Voici quelques points saillants :

Meilleur Contrôle

Une fois que vous avez tous vos scripts PowerShell au même endroit, vous ne vous demandez plus sur quel serveur un script est exécuté. Vous pouvez désormais oublier ce script que vous avez écrit il y a deux ans qui est maintenant obsolète et qui bloque certains comptes de service.

Vous pouvez organiser les scripts dans une structure de dossiers facilement navigable, contrôler exactement où tous vos scripts s’exécutent et même utiliser des pipelines pour diviser de grands scripts monolithiques en petits morceaux modulaires qui peuvent être réutilisés dans plusieurs tâches.

Planification Facile

Avec Jenkins, vous disposez d’un lieu central unique avec un support complet pour la planification de l’exécution de scripts PowerShell. Vous pouvez programmer différents scripts pour qu’ils s’exécutent à différents moments avec différents paramètres, avoir une belle interface graphique web pour gérer les planifications et plus encore.

Contrôle de Version

Avoir des scripts PowerShell sous un certain contrôle de version résout de nombreux problèmes différents. L’un d’entre eux est la possibilité de s’intégrer à des outils tels que Jenkins. Jenkins peut s’intégrer à Git et à d’autres produits de contrôle de version pour extraire automatiquement la dernière version.

Logs consolidés

Lorsque les scripts PowerShell sont dispersés un peu partout et créent des journaux, ces derniers peuvent être dispersés partout. Avec Jenkins, vous obtenez un excellent journal dans une fenêtre de sortie lisible sur un site Web au lieu de devoir fouiller dans un fichier journal créé par votre tâche planifiée.

Prérequis/Exigences

Cet article vous guidera sur la configuration de Jenkins pour exécuter des scripts PowerShell. Pour ce faire, vous aurez besoin de quelques éléments pour suivre.

Installation du plugin PowerShell

Pour exécuter des scripts PowerShell avec Jenkins, vous devrez installer le plugin PowerShell. Pour ce faire, à la page principale :

  1. Cliquez sur Gérer Jenkins puis sur Gérer les plugins.
  2. Cliquez sur l’onglet Disponible.
  3. À droite de l’écran, saisissez powershell dans la zone de Filtrage. Vous devriez ensuite voir apparaître le plugin PowerShell comme indiqué ci-dessous.
Looking for the PowerShell extension

4. Sélectionnez la case Installer et cliquez sur Installer sans redémarrage.

5. L’installation du plugin PowerShell créera une option d’étape de construction Windows PowerShell lorsque vous fournirez le script PowerShell à exécuter un peu plus tard.

Création d’un travail

Jenkins a un concept de travaux. Un travail est un ensemble d’instructions que vous pouvez fournir à Jenkins pour savoir quels scripts exécuter, quels horaires respecter, etc. Vous allez créer un travail dans cette section qui exécutera un script PowerShell. Pour ce faire, vous allez configurer un travail qui clonera un dépôt Git dans Jenkins.

  1. Une fois connecté à Jenkins, cliquez sur Nouvel élément dans le coin supérieur droit.
New Item menu option

2. Ensuite, vous serez présenté avec l’écran affiché ci-dessous. Sélectionnez Projet libre. Ce type de travail permettra la plus grande flexibilité.

Creating a new Jenkins project

3. Donnez au travail le nom de Hello World et cliquez sur OK.

Using Hello World for the project name

4. Vous devriez maintenant être sur l’écran de Configuration du travail. Vous devriez maintenant voir une section appelée Gestion du code source comme indiqué ci-dessous. Cela vous permet de spécifier quel référentiel Git Jenkins clonera pour le rendre disponible au travail. Pour cette démonstration, choisissez Git.

Source Code Management option

5. Lorsque vous cliquez sur Git, vous devriez maintenant voir une option vous demandant les informations sur votre référentiel Git. Il s’agit du référentiel Git qui contient vos scripts PowerShell.

Setting the Git repo

Ci-dessous, vous trouverez un récapitulatif de chaque champ :

  • URL du dépôt – L’URL pointant vers le dépôt Git. Dans TFS, par exemple, l’URL peut ressembler à ceci : *http://NOM_DU_SERVEUR:8080/tfs//Messaging/_git/Dynamic Distro List*
  • Identifiants – Un nom d’utilisateur/mot de passe qui a accès au dépôt. Si vous n’avez pas encore configuré d’identifiants, vous pouvez en créer un en cliquant sur Ajouter.
  • Nom – Cela peut être laissé vide.
  • Refspec – Cela peut être laissé vide.
  • Spécificateur de branche – Cela vous permet de choisir quelle branche vous voulez que ce travail utilise. Par défaut, il va tirer la branche master, mais si vous avez une autre branche de test que vous voulez utiliser, vous pouvez la spécifier ici.

Vous pouvez également cloner plus d’un dépôt pour un travail en utilisant le bouton Ajouter un dépôt ci-dessus. C’est utile si vous avez des modules ou d’autres dépendances dont vous avez besoin dans un dépôt séparé.

Ajout de l’étape de build PowerShell Windows

Peut-être avez-vous un script à la racine de la branche principale du dépôt Git appelé Hello World.ps1. À l’intérieur de ce script, vous avez une seule ligne :

Write-Host "Hello World, I'm a Jenkins build!"

Vous aimeriez exécuter ce script lorsque le travail s’exécute. Pour ce faire, vous devrez créer une étape de build.

Jenkins vous permet de spécifier de nombreuses étapes de build par travail. Pour vos besoins, vous devez ajouter une étape de build PowerShell Windows. Pour ce faire, à l’écran de configuration du travail :

  1. Cliquez sur le bouton Ajouter une étape de build et choisissez PowerShell Windows.
Windows PowerShell Build step

2. À l’intérieur de la boîte Commande, sourcer le script PowerShell situé dans votre dépôt Git comme indiqué ci-dessous. Vous pouvez voir que nous utilisons une variable d’environnement PowerShell appelée WORKSPACE. Cette variable représente le répertoire de travail actuel (le dossier racine du dépôt Git).

Running the Hello World.ps1 script

3. Cliquez maintenant sur Enregistrer pour sauvegarder le travail.

Vous devriez maintenant avoir une tâche configurée pour invoquer un script PowerShell à partir d’un dépôt Git!

Exécution du script PowerShell

Maintenant que vous avez créé une tâche, exécutez-la et examinez la sortie.

  1. Assurez-vous d’être sur l’écran principal de la tâche. Si vous avez utilisé le nom Hello World pour cette tâche, l’URL par défaut sera http://localhost:8080/job/Hello world/.
  2. Sur l’écran principal de la tâche, cliquez sur Construire maintenant du côté gauche comme indiqué ci-dessous.
Running the build

En cliquant sur Construire maintenant, un build de la tâche en cours est lancé immédiatement. Pour les tâches complexes prenant du temps pour s’exécuter, vous aurez la possibilité de cliquer sur la construction et voir la sortie en temps réel pendant son exécution. Dans ce cas, cependant, la tâche s’exécutera pratiquement instantanément.

4. Pour voir les résultats, cliquez sur la coche verte à côté de la construction.

Inspecting build results

Si tout s’est déroulé comme prévu, vous verrez quelque chose comme ce qui suit dans votre sortie:

Build log results

Planning et Déclencheurs

Vous avez maintenant un travail qui peut s’exécuter quand nécessaire et qui produit le message Hello World. Mais l’un des principaux arguments de vente de Jenkins est de remplacer les tâches planifiées. Nous ne voulons pas devoir le lancer manuellement. Si vous rouvrez ce travail, vous verrez une section appelée Déclencheurs de construction.

Available build triggers

Ce sont vos options pour exécuter un travail sans avoir besoin de cliquer sur Construire maintenant dans Jenkins.

Création d’une planification

Il existe plusieurs options différentes pour créer des déclencheurs. Dans cet exemple, restons simples.

  1. Sélectionnez Construire périodiquement. Ce déclencheur vous permet de planifier des travaux en utilisant une syntaxe de planification similaire à cron.

2. Définissez le travail pour qu’il s’exécute à 7h30 du matin le lundi, mercredi et vendredi comme indiqué ci-dessous.

Setting schedule to 7:30AM MWF

3. Enregistrez les modifications et attendez.

Lorsque la date et l’heure assignées surviennent, vous verrez alors le script s’exécuter comme souhaité sous Historique de construction.

Build running on schedule

Vous avez maintenant un script PowerShell planifié dans Jenkins qui s’exécutera à intervalles réguliers.

Lecture complémentaire

Source:
https://adamtheautomator.com/powershell-jenkins/