Jenkins : centraliser la gestion des tâches planifiées

Windows Server 2012R2Windows Server 2016Windows Server 2019

Jenkins est un logiciel open source gratuit d’intégration continue. Il est normalement utiliser par les équipements de développement pour s’assurer d’une non régression du code source.

De façon détourné, il est possible d’utiliser Jenkins comme un ordonnanceur pour centraliser l’administration des tâches planifiés Windows et/ou Linux.

Je vous propose dans cet article de vous expliquer comment utiliser Jenkins pour gérer les tâches planifiées dans un environnement Windows Server.

Installer Jenkins sur Windows Serveur

Installation de Jenkins

Télécharger la dernière version de Jenkins, décompresser l’archive et exécuter l’assistant d’installation. Au lancement de celui-ci, cliquer sur Next 1.

Wizard install jenkins

Si nécessaire changer le dossier d’installation puis cliquer sur Next 1.

Folder install

Démarrer l’installation en cliquant sur le bouton Install 1.

Confirm install

Patienter pendant l’installation …

wait during installation

L’installation terminée, fermer l’assistant en cliquant sur Finish 1.

Installation completed

Maintenant que l’installation de Jenkins est effectuée, nous allons passer à la configuration post-installation.

Configuration post-installation de Jenkins

Si votre navigateur ne s’ouvre pas automatiquement à la fin de l’installation, lancer le manuellement et entrer l’adresse suivante : http://localhost:8080. Patienter pendant le démarrage complet de Jenkins.

Wait load

Avant de commencer la configuration, il faut débloquer celui-ci en suivant les instructions.

Unlock Jenkins

Ouvrir le fichier initalAdminPassword et copier le mot de passe 1.

Initial password

Coller le mot de passe dans le champ 1 et cliquer sur Continuer 2.

Password

Cliquer sur Installer les plugins suggérés 1.

Plugins

Patienter pendant l’installation des plugins …

Créer un compte administrateur en complétant le formulaire 1 et cliquer sur Sauver et Continuer 2.

Admin account configuration

Configurer l’url du service Jenkins 1 et cliquer sur Sauver et terminer 2.

Configure URL - Jenkins

La configuration de l’URL va permettre l’accès à l’agent distant de communiquer avec le serveur, si vous laissez 127.0.0.1 ou localhost les agents ne pourront pas être installés.

La configuration post-installation est terminée, cliquer sur le bouton Commencer à utiliser Jenkins 1.

Configuration completed

Paramétrage de Jenkins

Maintenant que Jenkins est fonctionnel, nous allons passer à son paramétrage et à l’installation des plugins nécessaire pour gérer les tâches planifiées sous Windows.

Depuis la page d’accueil, cliquer sur Administrer Jenkins 1.

administer Jenkins

Configuration de la sécurité globale

Depuis la page Administrer Jenkins, cliquer sur Configurer la sécurité globale 1.

Global security

Décocher la case Activer la sécurité 1 puis cocher l’option Au hasard 2  pour la configuration des ports de l’agent. Cliquer ensuite sur Enregistrer 3.

Jenkins security

Retourner à la page Administrer Jenkins.

Installation des plugins pour gérer Windows

Cliquer sur Gestion des plugins 1.

Plugins manager

La première page de gestion des plugins affiche les mises à jour en attente. Cliquer sur l’onglet Disponibles 1.

plugins to update

Dans la zone de recherche saisir Windows 1 pour filtrer les plugins, sélectionner les plugins 2 (Powershell, WMI Windows Agents, WinRM Client) et cliquer sur Installer sans redémarrer 3.

select plugins for jenkins

Patienter pendant le téléchargement et l’installation des plugins …

Wait during install plugins

Une fois les plugins installés, cocher la case Redémarrer Jenkins quand l’installation est terminée et qu’aucun job n’est en cours 1.

Restart jenkins

Patienter pendant le redémarrage de Jenkins …

Wait during restrat

Si la page ne s’actualise pas automatiquement, appuyer sur la touche F5 du clavier. Après le redémarrage il peut être nécessaire de s’identifier de nouveau.

Login page - Jenkins

Création d’un job

Dans cette partie, nous allons voir comment créer notre premier job, qui va exécuter la commande IPCONFIG. N’ayant pour le moment pas déclarer d’autre nœuds, le job sera exécuté sur le serveur Jenkins lui-même.

Le job qui va être créé dans cette partie sera utilisé ensuite dans les autres chapitres de ce tutoriel.

Depuis la page d’accueil, cliquer sur créer un nouveau job 1.

New job

Nommer le job 1, sélectionner Construire un projet free-style 2 et cliquer sur OK 3.

Project name and type

Donner une description 1 et cliquer sur Build 2.

Job configuration

Cliquer sur le bouton Ajouter une étape au build  1 et choisir Exécuter une ligne de commande batch Windows 2.

Add step at build

Entrer la commande à exécuter 1 et cliquer sur Sauver 2.

Command for Jenkins job

Le projet est créé, pour le tester, cliquer sur Lancer le build 1.

Start job - Jenkins

Dans widget historique, on voit que le job a été exécuté 1.

build history - Jenkins

Passer le curseur sur le numéro du job, cliquer sur la flèche pour ouvrir le menu et cliquer sur Console Output 1.

Console Output

Le résultat de la commande s’affiche comme si on l’avait exécuter directement depuis une fenêtre de commande Windows.

Result command

Ajouter un nœud distant Windows dans Jenkins

Maintenant que nous avons vu comment créer et exécuter  un tache avec Jenkins, nous allons ajouter un nœud distant Windows afin de pouvoir exécuter le projet dessus.

Un nœud distant est un serveur où l’on va installer un agent Jenkins qui va communiquer avec le serveur. Il est nécessaire que Java soit installé sur le serveur distant.

Sur la page d’accueil, cliquer sur Administrateur Jenkins 1.

Jenkins home

Au passage, on peut voir notre projet sur la page d’accueil ainsi que son état.

Cliquer sur Gérer les nœuds 1.

manage the nodes

Une page avec la liste des nœuds s’affiche, cliquer sur Créer un nœud 1.

Node list

Entrer un nom pour l’agent 1, choisir l’option Permanent Agent 2 et cliquer sur OK 3.

Add node

Configurer l’agent 1 et cliquer sur Enregistrer 2. Voici les paramètre à configurer correctement :

  • Répertoire de travail du système distant : dossier sur le serveur distant qui servira à la génération des scripts.
  • Utilisation : Réserver cette machine pour les jobs qui lui sont attachés seulement.
  • Méthode de lancement : Choisir Launch agent via Java Web Start.
Configure agent

L’agent est ajouté, celui-ci est pour le moment déconnecté, il faut le lancer à l’aide Java sur le serveur distant.

Agent added

Maintenant que l’agent est configuré, aller sur le serveur distant, avec un navigateur internet  connectez vous au serveur Jenkins et aller sur la page de détail du nœud (Administrer Jenkins / Gérer les nœuds / [NOEUD]). Copier la ligne 1 correpond à Run from agent command line.

Select line for lauch agent

Ouvrir une invite de commande en administrateur et coller la ligne puis valider en appuyant sur Entrer.

Cmd

Cliquer sur Exécuter 1 pour lancer l’agent.

Execute java

Une fenêtre java s’ouvre avec l’état de connexion de l’agent au serveur.

Jenkins agent connected

La partie qui suit est facultative, elle permet d’installer l’agent comme un service pour qu’il soit démarré automatiquement. Dans la fenêtre de l’agent cliquer sur File 1 puis sur Install as a service 2.

Jenkins agent as a service

Cliquer sur OK 1 pour confirmer l’installation du service.

Confirm install as service - jenkins

Dans la gestion des agents sur l’interface Web, l’agent doit apparaître comme connecté.

Maintenant que l’agent distant est configuré, nous allons modifier la tâche pour qu’elle s’exécute dessus.

Exécuter la tâche sur nœud distant

Depuis la page d’accueil de Jenkins, passer le curseur de la souris sur le nom du projet, cliquer sur la flèche pour dérouler le menu et cliquer sur Configurer 1.

Edit job - Jenkins

Dans la section General du job, cocher la case Restreindre où le projet peut être exécuté 1, dans le champ Expression saisir le nom de l’agent 2 et cliquer sur la proposition 3 pour sélectionner l’agent.

Select agent - jenkins

L’agent sélectionné, cliquer sur Sauver 1.

Save job - Jenkins

Cliquer sur Lancer un build 1, quand celui-ci est exécuté afficher la sortie console 2.

Le retour console affiche la configuration IP de l’agent.

Jenkins - console remote agent

Exécuter plusieurs commandes

Il est possible d’exécuter plusieurs commandes à la suite comme si un fichier batch est exécuté. Dans la partie Build du job la liste des commandes à exécuter.

Multiple commands

Sur la sortie console, on peut voir l’exécution des deux commandes.

Output console

Exécuter une commande PowerShell

Au début du tutoriel lors de l’installation des plugins, nous avons installé PowerShell qui permet l’exécution de commande PowerShell.

Le fonctionnement est identique au ligne de commande batch Windows, lors de l’ajout d’une étape au Build, choisir Windows PowerShell 1.

Jenkins - Windows PowerShell

Entrer la ou les commandes PowerShell à executer.

PowerShell command

Dans la sortie console du job, on retrouve le résultat de la commande.

Output command

Execution d’un job par WinRM

WinRM est un protocole qui permet l’administration à distance d’un serveur Windows. L’utilisation de job par WinRM permet d’exécuter des commandes batch et PowerShell sur des serveurs distant sans avoir besoin d’installer l’agent.

Le plugin WinRM doit être installé.

Pour fonctionner, j’ai dû joindre le serveur où Jenkins est installé sur le domaine.

Depuis la page d’accueil de Jenkins, créer un nouveau projet en cliquant sur Nouveau Item 1.

New project - Jenkins

Nommer le job 1, sélectionner Construire un projet free-style 2 et cliquer sur OK 3.

New project

Donner une description 1 au projet puis cliquer sur Build 2.

Project configuration

Cliquer sur le bouton Ajouter une étape au build 1 et sélectionner WinRM Client 2.

Add step - Jenkins

Entrer le nom DNS du serveur distant 1 puis cliquer sur Ajouter / Jenkins 2 pour configurer des informations d’identification.

Configure remote host

Saisir l’identifiant 1 et mot de passe 2 permettant la connexion au serveur distant. Cliquer Ajouter 3 pour les enregistrer.

Credentials for WinRm - Jenkins Providers

Sélectionner les identifiants créés. Dans le champ Command 2 entrer la commande a exécuté  et cliquer sur Sauver 3.

Configure command

Maintenant que le job est créé, cliquer sur Lancer un build 1.

Project added

Une fois celui-ci exécuté, afficher la sortie console 1.

go output console

La sortie console affiche le résultat de la commande ipconfig. On peut également voir au début la connexion au serveur distant par WinRM.

WinRM - Jenkins - Result

Configurer la planification du job

Maintenant que nous savons comment mettre un job en place, nous allons modifier le premier job pour le planifier.

Sous Jenkins la planification se configure avec la syntaxe des cron sous Linux. Le site Crontab Generator peut vous aider à générer la syntaxe.

Aller sur la configuration du job dans la section Ce qui déclenche le build, cocher la case Construire périodiquement 1 puis entrer la planification dans le champ Planning 2 et cliquer sur Sauver 3. Lors de la saisie de la planification sous le champ s’affiche la date de l’exécution précédente ainsi que de la suivante.

job planning

Vérifier que le build ce soit bien exécuté à l’heure programmée 1.

executed build - Jenkins

Afficher le calendrier des jobs

Maintenant que nous avons les jobs avec une planification, il serait intéressant de pouvoir visualiser l’ensemble dans un calendrier.

Dans la gestion des plugins, installer Calendar View 1.

Plugins calendar view

Une fois le plugin installé, retourner sur la page d’accueil de Jenkins et cliquer sur le + 1 pour ajouter une vue.

Add view

Nommer la vue 1, selectionner Calendar View 2 et cliquer sur OK 3.

Name view

Configurer la vue en fonction de vos besoins en sélectionnant l’affichage par défaut 1, les jobs à afficher 2 et terminer en cliquant sur OK 3.

Configuration view

Un calendrier avec la planification des jobs s’affiche.

Planning view

Conclusion

Ce tutoriel s’arrete ici et j’espere qu’il vous aidera pour ordonnancer vos taches planifiées sous Windows.

Le tutoriel ne couvrent qu’une partie des fonctionnalités disponibles avec Jenkins, il est également possible de l’utiliser avec Linux en SSH, de configurer des notifications après l’execution d’un Build…

De toutes les solutions que j’ai essayé, Jenkins reste la plus simple à prendre en main et dispose de beaucoup de documentation et une communauté active si vous avez besoin d’aide.

Romain Drouche
Architecte Système | MCSE: Core Infrastructure
Expert en infrastructures IT avec plus de 15 ans d’expérience sur le terrain. Actuellement Chef de projet Systèmes et Réseaux et Référent SSI (Sécurité des Systèmes d’Information), je mets mon expertise au service de la fiabilité et de la sécurité des environnements technologiques.

Laisser un commentaire