Chaine DevOps avec de multiples Raspberry clients

Bonjour à tous,

Je travail sur un projet d’application java client installée sur de multiples Raspberry (plusieurs dizaines potentiellement). J’aimerais mener ce projet en intégration/déploiement continue.
J’ai déjà vu qu’avec Jenkins je pouvais à chaque commit/push sur le répertoire git récupérer les sources, pour tester et build l’application.
Mon problème réside dans la phase de déploiement. Je sais que Jenkins permet de déployer sur un serveur mais quand est-il pour déployer une application sur de multiples Raspberry clients ? J’ai entendu parler d’Ansible mais je ne vois pas comment l’intégrer à la chaine de déploiement continue.

Autre contrainte, les Raspberry clients seront sur divers réseaux dont je n’ai pas la gestion (pas de redirection de port possible ?) les IP ne seront donc pas connus par avance et pourront potentiellement changer (pas de ssh ?).

Si vous avec des idées pour réaliser le déploiement continue, ou de la documentation qui m’aiderait dans ma recherche je suis preneur !

Merci d’avance pour vos réponses
David

Salut,
si tu ne peux pas faire de redirections de ports c’est les raspberry pi qui devront interroger un serveur centrale pour récupérer les mises à jour. Je te conseils donc de regarder du coté de Puppet plutôt que de Ansible.

En gros, Ansible repose sur SSH et exécutes des commandes à distance sur les clients en SSH. C’est ultra simple et très facile à prendre en main. Puppet lui utilise un agent installé sur chaque client qui va interroger un master, càd un serveur centrale sur lequel tu as la main. C’est une architecture plus compliquée et Puppet a la réputation d’être moins simple que Ansible, notamment parce-qu’il utilise son propre langage. En revanche, ça s’adapte à absolument tous les réseaux !

Pour moi je verrais les choses de la façon suivante :

  1. Tu écrits ton code et tu le pousses sur un répo git
  2. Sur ton répo un hook s’occupe d’appeler jenkins pour : remettre en forme ton code selon tes standards (un linter), s’assurer qu’il n’y a pas de bug, compiler le code (dans ton cas je présume que tu cherches à obtenir un .jar à distribuer à tes clients finaux), et push le code obtenu (on parle d’artefact) sur ton master puppet.
  3. Tes clients puppet finaux viennent régulièrement interroger ton puppet master et devraient voir une diff dans les fichiers, et donc télécharger la nouvelle version.
1 J'aime

Merci beaucoup pour cette réponse très claire !
Petit question, comment push-t-on l’artefact ? Via un plugin Jenkins ?

Merci d’avance,

David

Salut, ouais il me semble https://plugins.jenkins.io/publish-over-ssh