Accueil > Non classé > Rundeck

Rundeck

Bonjour à tous !

Dans cet article, nous allons nous pencher sur le cas d’un outil fort intéressant: “Rundeck” !

Qu’est ce que Rundeck ?

Rundeck est un outil d’automatisation de processus idéal pour administrer un ou plusieurs serveurs. Rundeck est ainsi une sorte de chef d’orchestre permettant d’exécuter des commandes sur des machines distantes ou locales.

L’outil est accompagné d’une interface dite ”web” simplifiant l’accès aux scripts et autres jobs mais également d’une interface “ligne de commande” : une collection d’outils est en effet fournie afin d’utiliser toutes les fonctionnalités offertes par le logiciel.

Cet article se décompose en trois parties. Dans la première, nous verrons comment installer Rundeck sur une machine. La seconde partie traitera de la configuration de l’outil : comment créer des tâches dont les commandes s’exécuteront sur des machines distantes. Enfin, la troisième et dernière partie permettra d’en savoir plus quant à  l’utilisation concrète de Rundeck au sein d’un projet.

Installation et première commande

L’installation est très simple.

  • télécharger Rundeck: http://rundeck.org/downloads.html
  • placer ce jar dans un répertoire quelconque (ex: /home/you/rundeck/)
  • exécuter la commande “java -jar rundeck-launcher-1.4.3.jar” (attention! il ne s’agit peut-être pas de la dernière version)

A la fin de l’installation, le serveur est déjà lancé ! Naviguez simplement vers cette url : http ://localhost :4440/

Par défaut, Rundeck créé un utilisateur “admin” avec pour mot de passe … “admin”. Inutile de préciser qu’il sera judicieux de changer cela très rapidement. Une fois loggué pour la première fois, Rundeck vous propose de créer votre projet.

Après avoir créé notre premier projet, Rundeck nous présente son interface principale de gestion. Un formulaire permet déjà l’exécution d’une commande shell. Essayons !


1
echo "Hello World ! Execution de la commande sur ";hostname

L’exécution de la commande s’effectue sur le seul “nœud” disponible : la machine locale. Voyons comment configurer d’autres nœud…

Configuration de Rundeck

Les nœuds

Nous venons de créer un projet et lancer une commande simple. L’exécution de cette commande a été effectuée sur la machine locale. Comment exécuter cette même commande sur une machine distante ?

Rundeck est capable de se connecter (via SSH) sur d’autres machines afin d’y lancer des commandes et autres scripts. La configuration d’une de ces connexions s’appelle ”un noeud”. La gestion des différents noeuds n’est pas interfacée : il va donc falloir éditer manuellement un fichier particulier (ou plus vulgairement … “mettre les mains dans le cambouis”).

Si Rundeck est actuellement en marche, stoppez le (ou simple CTRL+C) puis, éditez le fichier suivant :


1
vi RUNDECK_INSTALL/projects/YOUR_PROJECT/etc/resources.xml

où:

  • RUNDECK_INSTALL = le répertoire d’installation de votre Rundeck
  • YOUR_PROJECT = le nom du projet que vous avez créé

Par défaut, ce fichier se présente sous cette forme :


1
2
3
4
5
<?xml version="1.0" encoding="UTF-8"?>

<project>
<node name="LFR407224" description="Rundeck server node" tags="" hostname="LFR407224" osArch="x86" osFamily="windows" osName="Windows 7" osVersion="6.1" username="cbrouill"/>
</project>

Ajoutez un noeud qui permette l’exécution d’une commande sur une machine distante, puis redémarrez Rundeck.


1
<node name="my super node" type="Node" description="Un simple test" tags="test,remote,article,machine,linux" hostname="chiptunes.fr" username="cyril"/>

où IP_MACHINE = l’adresse IP de la machine distante que vous souhaitez contacter.

Après redémarrage de Rundeck, le nouveau noeud devrait être affiché :

Attention ! Le filtrage par défaut peut éventuellement cacher le nouveau noeud. Editez le filtre ! Pour cela, cliquez sur l’option de filtre (symbolisée par une flèche pleine pointant vers la droite) puis éditez le champ ”Name” (laissez le vide).

Maintenant que nous avons notre noeud configuré, comment exécuter une commande sur celui-ci ?

Les jobs

Un job est une entité Rundeck regroupant plusieurs notions. Un job peut définir :

  • une ou plusieurs “étapes”
  • l’exécution d’une ou plusieurs commandes sur une ou plusieurs machines distantes et/ou locales
  • la récurrence du lancement de la tâche

Pour créer un job, rendez-vous sur l’interface de gestion des “Jobs”:

Puis cliquez sur le bouton “New job”.

Remplissez le formulaire de création:

  • “Save this job” : cochez “Yes”
  • laissez la partie “Workflow” telle quelle : renseignez simplement une commande shell
  • “Dispatch to nodes” : cochez la case
  • réglez le filter permettant de récupérer le nœud que nous avons créé (“my_super_node”)

Validez ! Voici votre premier job !

Cliquez sur le bouton de lancement puis sur le bouton ”Run job now”. Une erreur apparait … une erreur ?

Authentification

Nous avons ajouté un nœud puis un job utilisant ce nœud mais comment Rundeck peut-il bien se connecter à la machine distante ? Rappelez-vous, il n’y a, à aucun moment un champ qui pourrait ressembler à un mot de passe. Alors comment peut-il bien se connecter sur cette machine distante ?

Tout simplement avec une clé SSH.

Revenez au début de cet article et regardez attentivement la capture d’écran lors de la création du projet. Il y a un champ nommé ”Default SSH key  file”. La valeur pointe par défaut vers le fichier contenant les clés SSH du système sur lequel Rundeck est installé.

Il suffit donc de configurer la connexion avec la machine distante ciblée en ajoutant la bonne clé.


1
ssh-copy-id -i /home/cyril/.ssh/id rsa USER@HOST

où:

  • USER = le nom d’utilisateur qui se connecte sur la machine (attention à faire correspondre celui configuré dans le noeud Rundeck !)
  • HOST = le nom ou l’ip de la machine distante

Relancez le job : cette fois, il n’y a pas d’erreur.

Configurer les utilisateurs

Par défaut, Rundeck crée deux utilisateurs:

  • user (mot de passe “user”)
  • admin (mot de passe “admin”. Mais vous l’avez déjà changé !)

Pour ajouter un nouvel utilisateur, éditez le fichier ”realm.properties” présent dans votre installation et ajoutez une ligne :


1
cyril:azerty,user,admin

Le format est simple et documenté dans le fichier. L’utilisateur aura pour login ”cyril” avec ”azerty” comme mot de passe. Il aura les rôles ”user” et ”admin” (ce qui n’est, en soit, pas vraiment une bonne chose … mais passons. Il s’agit de tester ! Ne faites surtout pas cela en production ! ) .

Redémarrez Rundeck puis vérifiez.

Le mot de passe n’a pas nécessairement besoin d’ être en clair (en fait, aucun mot de passe ne devrait jamais être en clair): vous pouvez le hasher afin d’en augmenter la sécurité. Rundeck fournit un outil afin de générer vos mots de passe.


1
2
3
4
5
6
7
cd $RDECK_BASE
java -cp server/lib / jetty-6.1.21.jar:server/ lib / jetty-util-6.1.21.jar org.mortbay.jetty.security.Password cyril azerty

#OUTPUT =
#OBF:1w8720791vn61vnw206x1w9j
#MD5:ab4f63f9ac65152575886860dde480a1
#CRYPT:cyAdVJ8ZKedCM

La ligne “utilisateur” devient :


1
cyril:MD5:ab4f63f9ac65152575886860dde480a1,user,admin

Utilisation de Rundeck au sein d’un projet

Maintenant que nous avons configuré notre outil, il est temps de s’en servir de façon concrète !

Une des utilisations intéressante de Rundeck consiste dans le couplage avec un serveur d’intégration continue (comme Jenkins). Une fois que Jenkins a terminé de construire votre projet et après avoir mis à jour un éventuel repository Maven, il passe la main à Rundeck qui peut alors s’occuper de déployer les dernières versions: l’avantage réside dans le fait que vous contrôlez intégralement ce déploiement puisque c’est vous même qui écrivez le script !

Le plugin Jenkins

Il existe un plugin Rundeck pour Jenkins : ce plugin assure la connexion entre les deux outils.

N’oubliez pas de configurer le plugin avant toute action !

Brancher une cible Rundeck sur un projet Jenkins

Prenons par exemple le cas d’un projet nommé ”Projet Batch”. Comme son nom peut l’indiquer, il s’agit d’un projet contenant une collection de processus de batch géré par Springbatch (ou une simple collection de jar auto-suffisant). Le lancement d’un job Rundeck peut être associé à ce projet lors de chaque build de Jenkins :

Pour configurer cela, cliquez sur ”Configurer” puis scrollez sur la page afin d’afficher la partie concernant les ”Actions à la suite du build”. Vous pouvez voir que ”Rundeck”
est coché et que le champ ”Job identifier” a été renseigné avec l’id du job concerné.

L’id du job se trouve facilement en naviguant sur Rundeck.

Sur l’interface de Rundeck, cliquez sur ”Jobs” puis sélectionnez votre noeud (c’est celui qui correspond à la plateforme sur laquelle vous souhaitez lancer le job Rundeck). Enfin cliquez sur le job souhaité : l’id de ce dernier est alors identifiable sur la page. Attention, il s’agit bien de l’information “Id” et pas “UUID” qui nous intéresse.

Configurez l’action “Rundeck” comme une “action post-build”. Renseignez simplement l’id du job dans le champ idoine:

Conclusion

Rundeck est un outil pratique et fortement complémentaire avec un serveur d’intégration continue. L’intérêt réside principalement dans son extrême modularité : c’est vous qui êtes aux commandes (sans mauvais jeu de mot bien sur). L’inconvénient dans cette histoire c’est que vous allez devoir écrire vos propres scripts : cela peut être un surplus de travail non négligeable… Mais comme chacun sait, en informatique, il faut savoir perdre son temps pour en gagner et Rundeck est là pour ça !

Une petite anecdote finale ? Rundeck est propulsé par Grails ;)

 

Liens utiles:

Rundeck : http://rundeck.org/

Jenkins: http://jenkins-ci.org/

Grails: http://grails.org/

 

Share
  1. Denis VAUMORON
    12/10/2012 à 11:27 | #1

    Au risque de paraitre négatif, je vois mal ce qu’apporte Rundeck, Jenkins est déjà capable d’éxecuter des script sur une machine distante même s’il faut pour cela installer un esclave sur la machine cible…

  2. Cyril BROUILLARD
    12/10/2012 à 11:57 | #2

    Il s’agit en effet d’une approche différente et qui offre l’avantage de plus de possibilités amha.

    Rundeck offre une interface relativement simple : il peut convenir au besoin d’un adminsys pour le déploiement en simultané d’un war sur plusieurs machines (mais là aussi il existe d’autres outils, cluster-ssh par exemple)) comme il peut également aider une équipe de testeurs pour le lancement de procédures élaborées …

    Rundeck est un peu le genre d’outil ou la seule limite est l’imagination.

  3. jean
    20/10/2012 à 14:36 | #3

    Bonjour,

    Je m’intéresse à l’outil RUNDECK dans le cadre de mon travail mais je ne sais pas s’il existe d’autres solutions pour mon problème :

    Je m’occupe de l’exploitation de plusieurs serveurs sous TOMCAT et JBOSS (et même websphere). Je suis amené à déployer régulièrement des war/jar sur ces serveurs. Actuellement cela se fait par du copier/coller (pas très industriel même si c’est scripté) avec un risque d’erreur. Je cherche donc à avoir une console centralisée qui me permet de déployer les composants mais surtout de savoir les versions (via le MANIFEST) de ces composants sur les différents serveurs.

    Si vous avez une proposition…
    Merci.

  4. sysadmin
    03/01/2013 à 21:23 | #4

    @Denis VAUMORON

    Bonjour. Je ne comprends pas trop ta remarque car comme tu l’indiques toi-même Rundeck n’a pas besoin d’agent.
    Je suis admin système. Je viens de changer de client et je suis bien content de pouvoir exécuter ce que je veux sur tout le parc sans avoir à installer quoi que ce soit sur les 3000 serveurs !
    D’autant plus que si tu n’as pas d’outil équivalent à Rundeck pour effectuer cette installation initiale, bonjour la galère !!
    Aussi le problème de l’agent c’est qu’il peut ne pas être démarré pour X raisons donc en plus il faut mettre une supervision là-dessus etc …

  5. KABA
    15/07/2013 à 13:48 | #5

    bonjour
    j’ai bien aimé votre article. je voudrais savoir une information à propos de rundeck .

    sans utilisation de ssh rundeck peut-t-il envoyer des scripts ?

    car je me dis en cas de problème de connexion réseau on ne pourra pas de se connecter sur la machine distance via ssh

  6. 06/03/2015 à 16:46 | #6

    Une autre approche pour être sur d’éviter la faute de frappe entre le nom de la méthode et la clé de la propriété est celle d’android ou de play, la compilation de la configuration, poc est dispo là http://www.filmrally.com/

  7. 31/08/2015 à 03:28 | #7

    http://www.ezzza.com/Bet on Tennis Online

  8. Manu
    05/04/2017 à 20:07 | #8

    Bonsoir
    je recherche une formation sur rundeck

  1. 09/10/2015 à 21:34 | #1