Les différentes phases pour amener un logiciel en production peuvent être similaires
Chacune des étapes peut être automatisée ou non. Par exemple si la couverture par des tests fonctionnels automatiques n'est pas assez élevée, le passage entre l'environnement de tests et l'environnement de production peut être fait manuellement une fois que la QA donne son feu vert.
Jenkins fait partie des outils qui vont permettre de mettre en place cette automatisation.
La solution naïve
Vous pouvez découper vos différentes opérations en différents jobs. Par exemple build / smoke tests / acceptance tests / staging / prod. Si vous lancez les tâches une à une manuellement vous n'avez pas de problème, mais vous êtes loin d'avoir une usine logicielle bien huilée.
Une première solution consiste à lier les jobs et de les déclencher automatiquement les uns à la suite des autres.
Si vous avez des tâches manuelles vous pouvez utiliser le plugin promotion qui ajoutera un déclencheur manuel avant de passer à une étape suivante.
Un autre problème peut arriver. Si l'ensemble de vos tests prend plusieurs heures comment relancer le workflow à l'endroit où il est tombé en erreur sans avoir à repartir du début ?
Le plugin workflow
Pour répondre à cette problématique vous pouvez utiliser le plugin workflow qui aide à modéliser le pipeline. Au lieu d'avoir un ensemble de jobs que vous liez entre eux, vous utilisez un DSL pour définir toutes les phases et le cycle de vie de votre application. Un peu sur la logique de ce que l'on fait pour construire un rpm ou une image docker.
Comme le DSL n'est pas très intuitif il propose une aide pour générer les commandes
Si vous devez redémarrer la machine le job en cours finira son exécution et le workflow se relancera automatiquement une fois le redémarrage effectué.
Le futur
Le but dans les prochains mois est d'extraire ce fichier de Jenkins et de le mettre directement dans votre projet. Jenkins sera capable de le détecter automatiquement.
Le premier avantage est que le script sera versionné et directement lié à la version en cours de votre projet. Vous conserverez à chaque fois un historique des modifications. Ce fichier peut permettre à l'avenir de simplifier le travail des développeurs en générant automatiquement les jobs dans Jenkins. Nous allons passer de l'infrastcure as a service à l'infrastructure as the code.
Une des autres sources d'amélioration de Jenkins est d'essayer de proposer une interaction plus simple avec Docker. Il existe des plugins pour gérer le cycle de vie d'une instance mais le but est ici de proposer la création simple d'un ensemble d'instances pour reproduire ce que l'on retrouve en prod : un ou plusieurs serveurs pour l'application, d'autres pour les sources de données. Le but est double faciliter l'installation de votre application quelque soit sa topologie et faciliter la reproductibilité des builds dans le temps.
Pour cela Nicolas nous a présenté rapidement son plugin container-slaves-plugin. Je vous encourage à regarder la page du projet.
Au final j'ai bien aimé ce talk car je repars avec des idées concrètes pour améliorer ma manière de construire mes projets et une vision de ce que je vais bientôt pouvoir faire… Il ne manque plus qu'une belle interface responsive et ce sera génial... :-)
Aucun commentaire:
Enregistrer un commentaire
Remarque : Seul un membre de ce blog est autorisé à enregistrer un commentaire.