Dans ce tutoriel, je vais vous expliquer comment déployer Rundeck avec Docker afin d’automatiser les tâches sur serveur.
Lien vers le site officiel : Rundeck Runbook Automation
Présentation de Rundeck
Comment présenter Rundeck, je crois que c’est la partie la plus difficile de ce tutoriel, car en fonction de son poste, on peut en avoir différente utilisation.
Si je devais résumé en deux mots ça serait : automatisation de tâche.
D’un point de vue Admin Sys, Rundeck va être utiliser pour toutes la gestion des tâches automatiques afin de remplacer les tâches qui pourrait se trouver dans le Planificateur de tâches Windows et les cron
sous Linux.
Rundeck permet la connexion aux hôtes distants de plusieurs manières :
Une fois connecté à l’hôte distant, Rundeck va pouvoir exécuté des commandes ou des scripts.
La gestion dans Rundeck se fait à l’aide de Projets qui vont contenir :
- Des nodes (hôtes distants)
- Des Jobs qui vont contenir les actions (Scripts/Commandes) qui peuvent être planifiés ou non et être déclencher par Webhook.
L’avantage d’utiliser Rundeck pour l’exécution des tâches planifiées, c’est d’avoir la sortie de console et donc des logs.
Rundeck peut être installé directement sur un serveur Linux ou déployer en conteneur
Avertissement
Le déploiement en conteneur avec Docker, ne permet pas l’utilisation de WinRM et d’Ansible car Rundeck s’appuie sur des composants supplémentaires qui ne sont pas dans l’image
Dans le tutoriel, je vais vous expliquer comment utiliser Ansible avec Rundeck en conteneur.
Pour ce qui est de WinRM, je ne me suis pas penché dessus car j’utilise exclusivement SSH que cela soit pour Linux ou Windows.
Pour la petite histoire, je suis tombé sur Rundeck en cherchant une alternative à Jenkins que j’utilisais pour gérer les actions automatiques sur les serveurs.
J’ai recherché une alternative à Jenkins à cause du manque de mise à jour de certain plugins.
Prérequis pour le déploiement de Rundeck en conteneur
Pour déployer avec conteneur vous aurez besoins :
- Dun serveur Linux avec Docker et docker compose d’installé
En terme de ressource, Rundeck n’est pas très consommateur, 2 CPU et 4 Go de RAM suffise pour commencer, ensuite cela va dépendre du nombre de projets et de job.
L’espace disque va dépendre aussi des Jobs et des retours consoles que vous aurez.
Installer Rundeck avec Docker
Si vous avez l’habitude de me suivre et notamment sur les déploiements de logiciel en conteneur, j’ai écris un fichier docker-compose.yml
que je vais vous partager.
Le dépôt se trouve ici : Docker / Rundeck with MYSQL
Sur mon serveur, je vais mettre Rundeck dans le dossier : /containers/rundeck/
.
Commencer par cloner le dépôt dans le dossier où vous allez stocker les conteneurs pour Rundeck :
sudo git clone https://git.rdr-it.io/docker/rundeck-with-mysql.git .
Editer le fichier .env
:
sudo nano .env
Modifier l’URL configuré l’adresse d’accès à l’interface Rundeck et les mots de passe des comptes MySQL/MariaDB.
Avertissement
Afin que le conteneur puisse écrire dans les dossiers, il faut modifier les droits des dossiers :
sudo chmod 777 ./data/rundeck
sudo chmod 777 ./data/rundeck-jobs-logs
Je suis entrain de rechercher une meilleur configuration pour les droits
Une fois fois la configuration effectuée, télécharger les images :
sudo docker compose pull
Démarrer les conteneurs :
sudo docker compose up -d
Afficher les logs et vérifier qu’il n’y a pas d’erreur :
sudo docker compose logs -f
Les conteneurs démarrés, aller à l’interface Web avec un navigateur en utilisant l’URL indiquer dans le fichier .env
.
On arrive sur le formulaire d’authentification.
On va pouvoir passer à l’utilisation de Rundeck.
Utilisation de Rundeck
Pour illustrer ce tutoriel, je vais créer un projet, dans lequel je vais configurer un node (serveur distant) et un job.
Avant de créer le projet, je vais vous expliquer comment importer une clé privée dans Rundeck.
Par défaut les identifiants sont admin / admin.
A la connexion, on arrive sur un Dashboard qui résume l’activité de chaque projets, pour le moment celui-ci est vide.
Ajout d’une clé privée pour la connexion SSH
Avant de créer le projet, je vais vous montrer comment ajouter une clé privée pour la connexion SSH aux nodes.
Cliquer sur l’engrenage 1 puis sur Key Storage 2.
Cliquer sur Add or Upload a Key 1.
Sélectionner le type Private Key 1, coller la clé privée 2 puis nommer la clé 3 et cliquer sur Save 4.
La clé privée est enregistré dans Rundeck.
Mémo
Lors de la configuration des nodes, nous utiliserons le Storage path
pour indiquer quelle clé privée utilisée.
Il est aussi possible de stocker un mot de passe de session SSH.
Ajouter un projet à Rundeck
Nous allons maintenant créer notre premier projet.
Les éléments qui caractérisent un projet :
- Un node Executor, c’est à dire la façon de se connecté aux nodes.
- Des jobs qui sont différentes tâches.
- Des notes, qui sont les ordinateurs sur lesquels on va exécuter les jobs.
Depuis la page d’accueil, cliquer sur le bouton Create New Projet 1.
Commencer par nommer le projet 1 puis aller sur l’onglet Default Node Executor 2.
Sélectionner le Node Executor SSHJ-SSH 1 puis aller sur l’onglet Execution History Clean 2.
Par défaut avec un déploiement en conteneur de Rundeck, c’est le seul Node Executor qui fonctionne.
Vous remarquerez également, qu’il est possible de configurer certaines options par défaut pour l’authentification des nodes.
Par défaut, le nettoyage des logs n’est pas activé sur les projets, si vous le souhaitez activer cette fonctionnalité. Cliquer sur Create 1.
Configuration des nodes du projet
A la création du projet, on est redirigé vers la page d’édition des Nodes du projet que l’on vient de créer.
Cliquer sur Add a new Node Source 1.
Cliquer sur File 1.
Indiquer le chemin et le nom du fichier dans le champ File Path 1, cocher les cases Generate 2 et Writeable 3 puis cliquer sur le bouton Save 4.
L’emplacement du fichier est relative au conteneur et non à l’hôte Docker.
Le chemin correspond au volume :
./data/rundeck:/home/rundeck/server/data/
Supprimer le Node Local par défaut en cliquant sur Delete 1.
Cliquer sur Save 1.
La source des Nodes pour le projet est sauvegardé.
Dans le même temps, si on regarde sur le serveur, on peut voir que le fichier d’inventaire des Nodes a été créé.
On va maintenant éditer le fichier pour un ajouté un hôte (node), aller sur l’onglet Edit 1 et cliquer sur Modifiy 2.
Un éditeur s’ouvre où il est possible de modifier le fichier.
A minima, voici les informations a mettre pour la configuration du node :
Dans le paramètre
ssh-key-storage-path
on retrouve l’emplacement du la clé privée que l’on a ajouté au début.
Connexion par mot de passe
Pour utiliser un mot de passe :
ssh-authentification: password
ssh-password-storage-path: key/path/password
L’édition terminée, cliquer sur Save 1.
Le node est ajouté, si vous regardez dans le fichier sur le serveur, vous retrouverez le contenu que vous avez écris dans l’éditeur.
Il est possible de retourner à l’édition des Nodes depuis le menu de navigation dans PROJET SETTINGS
Pour vérifier la prise en compte, cliquer sur NODES 1.
Cliquer sur All nodes 1.
Les hôtes s’affichent, en cliquant dessus on accède aux détails.
La configuration des Nodes est terminée.
Exécuter une commande sur un Node
Avant de passer à la configuration d’un job, on va voir comment passer une commande sur Node, cela revient à se connecter en SSH et à entrer une commande.
Depuis le menu de navigation à gauche, cliquer sur COMMANDS 1.
On va commencer par sélectionner le Node, cliquer sur la flèche 1 puis sur Show all nodes 2.
Cliquer sur l’hôte souhaité 1 pour avoir les détails puis sur la flèche 2 pour l’ajouter à la sélection.
Le node est sélectionné, enter la commande 1 et cliquer sur Run on 1 Node 2.
Normalement, le résultat de la commande s’affiche.
Ajouter un job au projet
Dans le menu de navigation, cliquer sur JOBS 1.
Pour le moment, la liste des Jobs est vide, cliquer sur Create a new Job 1.
Commencer par donner un nom 1 Job puis cliquer sur Workflow 2.
Dans la partie Workflow, on va configurer ce que va faire le Job dans la partie Step (étape) en ajoutant une ou plusieurs étapes qui peuvent être :
- Commandes
- Scripts
- Appel d’un autre job
- Playbook Ansible
- …
Dans le tutoriel, on va créer un script qui va mettre à jour le serveur. Cliquer sur Script 1.
Dans le champ Script 1 saisir les différentes commandes et cliquer sur Save 2.
Le script est ajouté et a créé une étape (step). Cliquer sur Nodes 1.
Il est possible de créer plusieurs étapes qui vont se suivre de façon dépendante ou indépendante. De façon dépendante si une étape échoue, je job s’arrête et les autres étapes ne sont pas effectués. le comportement se configure en adaptant l’option If a step fail.
Par défaut, le job est exécuté localement c’est à dire sur le conteneur, pour choisir le node, choisir Dispatch node 1 et cliquer sur le bouton refresh 2 pour afficher les nodes du projets.
Cliquer le node 1 pour avoir les détails et cliquer sur la flèche bleu 2 pour l’ajouter au Job.
Le node est sélectionné, cliquer ensuite sur Schedule 1.
Pour finir la configuration du Job, on va configuré une planification afin que le script soit exécuté tous les jours à 6H30.
Choisir Yes 1 à l’option Schedule to run repeatedly, configurer la planification 2 et cliquer sur Create 3.
Pour une configuration plus complexe de la planification du Job, il est possible de le faire au format cron.
Le job est ajouté.
Il est possible d’exécuté le job manuellement en cliquant sur le bouton Run Job Now.
Voici le résultat d’une exécution :
Le configuration du projet est terminé
Exécuter des Playbooks Ansible avec Rundeck en conteneur
Au début de ce tutoriel, j’ai expliqué quand avec Rundeck en conteneur, on avait pas la possibilité d’utiliser le plugin Ansible, mais on peut facilement contourné ce problème.
Dans un projet, il suffit de configurer comme Node, un serveur Linux avec Ansible et ensuite de configurer un job qui va lancer la commande ansible-playbook
.
Afin de visualiser, voici un schéma :
Exécuter des commandes et scripts sur Windows avec Rundeck en conteneur
Pour Windows, il faut passer par l’installation du serveur OpenSSH et utiliser la connexion SSH.
D’expérience, cette solution est la plus simple et la plus facile à maintenir, car vous pourrez utiliser la connexion SSH aussi avec Ansible.
Et un autre avantage de passer en SSH est l’utilisation de clé pour l’authentification qui évite l’utilisation d’un mot de passe.
Je terminerai sur ce point que Windows Server 2025 aura le service OpenSSH d’installé par défaut.
Ce premier tutoriel dédié à Rundeck s’arrête ici et j’espère qu’il va vous donné l’envie de l’utiliser.
D’autre tutoriel vont suivre car il y a plein de chose à dire et à faire avec cet outils.
N’hésiter pas être à être curieux.