Aller au contenu principal
toHero
jenkins /
title_actu
Do you DevOps ?

Ecrit par tohero

le 27 septembre 2019

Image
devops

Comme vous vous en doutiez, le mot DevOps est la concaténation des trois premières lettres de Development et Operations, et illustre ainsi l'union du développement et de l'exploitation.

Historiquement, ces deux aspects de l’informatique sont des entités complètement séparées au sein d’une entreprise. De part leurs nombreuses différences opérationnelles et l’hétérogénéité des profils, il semblait plus facile et naturel de les gérer séparément et donc de répartir les responsabilités entre chacun des deux pôles.

Cependant la séparation du développement et de l’exploitation pose un problème évident : Le mur de la confusion.

tohero-devops

Le mur de la confusion est un mur imaginaire qui sépare l'équipe de développement de celle d'exploitation. Ce mur représente la différence d'objectifs des deux pôles :

  • Le développement doit faire évoluer l'application à moindre coût et dans les meilleurs délais.
  • L'exploitation doit maintenir la stabilité et un niveau de qualité élevée.

Une oppositions se crée ainsi entre les deux équipes :

  • Changement contre stabilité
  • Coût et délai contre qualité

Toutefois, depuis 2010, en parallèle de l’essor des méthodes agiles et d’une volonté croissante de plus de flexibilité et de vélocité, un mouvement voulant rassembler ces deux équipes a pris de l’ampleur : le DevOps. Introduit comme la solution à ces conflits il permetrait de casser ce mur, et de réunir les objectifs de ces deux équipes historiquement concurrentes.

Par contre pour intégrer le DevOps au sein de ses équipes, il est nécéssaire d'atteindre une certaine fluidité et un certain niveau d’industrialisation entre le développement et l’exploitation. Pour cela, il faut adopter à minima de nouveaux processus au sein de vos équipes :

  • Automatisation des tests : Mise en place de tests unitaires (PHPUnit, JUnit, JSUnit, …)  
  • Automatisation de la surveillance qualité : A l’aide d’outils de vérification de la qualité du code (SonarQube, CodeSniffer, …)
  • Automatisation des déploiements

 

Devops : Intégration continue avec Jenkins

Jenkins est un outil open source d’intégration continue. Il permet entre autres l’automatisation de tâches en fonction de l’activité sur votre outil de versioning. Il peut se brancher aux principaux outils de versioning : GIT, SVN, CVS.

C'est tres souvent le premier outil DevOps a être déployé lors de la mise en place des process.

Dès qu’un développeur met à jour l’application, Jenkins peut le détecter et lancer un ensemble de tâches prédéfinies. On a alors un récapitulatif des tâches exécutées afin de savoir si l’ensemble des tâches a bien été effectué.

Grâce à l’installation de Jenkins, on a ainsi la possibilité d’ajouter des tests et déploiements automatisés à chaque nouvelle version de l’application et ainsi grandement réduire les risques de régressions.

 

jenkins_tohero_devops
jenkins-workflow

Exemple de workflow Jenkins

Tests avant déploiement

Tests Unitaires :

Les tests unitaires permettent de vérifier que le fonctionnement de l’application est toujours celui attendu. C’est une vérification “fonction par fonction” ou “brique par brique”, ainsi chaque test unitaire ne teste qu’une petite partie de l’application.

Ces tests demandent une certaine discipline mais doivent être mis en place par les développeurs tout au long du processus de développement.

A chaque développement, il faut donc les ajouter ou les mettre à jour afin qu’ils coïncident avec les nouveaux développements déployés sur l’application.

Les outils pour développer des tests unitaires sont nombreux et dépendent du langage utilisé : PHPUnit, JUnit, JSUnit, …

 

 

tests_unitaires
profils_sonarqube

SonarQube, test de la qualité de code

SonarQube est un logiciel open source permettant l’analyse de votre code supportant un tres large panel de langages.

Il analyse l’ensemble du code (moins certaines exclusions paramétrables) et remonte différentes mesures :

  • Bugs, vulnérabilités
  • Amélioration sur l'écriture de votre code
  • Le nombre de tests unitaires et leurs couvertures
  • La duplication de code

SonarQube possède énormément de configurations et l'ensemble de ses remontées sont paramétrables pour correspondre au mieux avec votre application.

Il dispose aussi de profils de qualité pouvant être ajoutés à votre projet. Ces profils contiennent différentes règles à vérifier selon le langage ou framework sélectionné. On peut trouver par exemple des profils Drupal, Magento, Java, etc...

Déploiement et tests fonctionnels

Une fois l’ensemble des précédents tests passés, il est temps de passer au déploiement de l’application sur un serveur de test. Ce déploiement automatique, effectué par Jenkins, est donc à mettre en place après les tests unitaires et l’analyse de SonarQube.

Une fois l’application livrée sur un environnement de test, il advient au client ou à l’équipe de test et qualité d’effectuer les tests fonctionnels. Cela permet de vérifier que l’application correspond fonctionnellement aux besoins du client et ne souffre d’aucun bug.

 

DevsOps tests fonctionnels

Pour les plus professionnels et les plus aguerris d’entre vous, vous pouvez néanmoins mettre en place des tests fonctionnels automatisés. Cela rendra la  tâche plus simple pour l’équipe de test. Pour bien comprendre la mise en place de ces tests automatisés, il faut savoir que les tests fonctionnels sont généralement divisés en deux catégories :

  • Les tests d’intégration utilisés pour vérifier le fonctionnement de l’ensemble d’une fonctionnalité (ajout au panier, changement de mot de passe, …). Voici une liste de différents frameworks permettant de vous aider en fonction du langage utilisé : Behat, Cucumber, …
  • Les tests d’acceptation ou recette qui visent à s’assurer que l’application correspond aux exigences du client. Pour réaliser ces tests, nous vous conseillons d’utiliser Selenium. La plupart des outils effectuant les tests d’intégration peuvent être directement reliés à Selenium.
Behat-test-fonctionnel
tests-fonctionnels-selenium

En conclusion

Très peu coûteuse, la mise en place de Jenkins et SonarQube comme socle de votre intégration continue augmente drastiquement la qualité du code et la vélocité de vos projets. Cette véritable industrialisation de la qualité vous assure de retrouver la confiance dans vos processus de développement et mise en production.

Nous utilisons systématiquement ces pratiques et vous encourageons forcement à les déployer au sein de vos projets.

Dans un contexte de société de service, le sujet des tests unitaires est plus épineux. Soyons clair, l’utilisation systématique des tests unitaires couplée à leurs automatisations transporte votre niveau de vélocité et d’agilité à un niveau incomparable. Par contre d’expérience il faut compter environ 30% de charge de travail supplémentaire et malheureusement dans des contextes de projet difficile ou avec des contraintes budgétaires serrées, trop souvent les clients font le  choix de préférer une solution moins chère plutôt qu’une solution plus agile, maintenable et véloce.

Le compromis que nous proposons est de cibler les fonctionnalités critiques du projet et de déployer les tests unitaires uniquement sur ces parties.

Et vous, quel est votre retour sur expérience sur les sujets DevOps ?

Avez-vous réussi à force de pédagogie et d’arguments à convaincre vos clients de préférer la qualité au jetable ?

A très vite !

Je suis une Start-up

toHero vous accompagne du lancement de votre projet vers son succès.

Je suis une Entreprise

Transparent et efficace nous sommes votre partenaire techonologique idéal

Demander un Devis.

Laissez vous guider par nos experts et travaillons ensemble à la réussite de vos projets