DevOps et Intégration continue : focus sur la démarche qualité de BlueMind

BlueMind a intégré le mouvement DevOps dans sa démarche qualité. Grâce à l’intégration continue nous produisons plus rapidement et de meilleure qualité.

Le terme DevOps est apparu assez récemment dans le paysage informatique mondial, mais s’est déjà hissé au sommet des pratiques les plus efficaces. D’après le cabinet Gartner en 2015, 25% des 2000 plus grands groupes mondiaux s’orientaient vers la démarche DevOps. Plus qu’une méthode de travail, il s’agit surtout d’un changement culturel qui vise, comme son nom l’indique, à rapprocher le développement des opérations. L’objectif est double : raccourcir les délais de déploiement de mises à jour et garantir un haut niveau de qualité.

Le secret de la démarche réside dans la coopération et le partage ; les développeurs et les responsables de l’exploitation des systèmes collaborent pour délivrer le logiciel en continu. Les cycles de développement sont plus courts, la qualité est évaluée tout au long du projet et les déploiements sont plus fréquents.

« DevOps est un ensemble de pratiques et de valeurs culturelles qui a fait ses preuves pour aider les organisations de toutes tailles à améliorer leurs cycles de sortie de logiciels, leur qualité, la sécurité et la capacité à obtenir rapidement un feedback sur le développement. »Puppet Labs, rapport «State of DevOps», 2017

BlueMind a choisi d’implémenter une démarche DevOps au travers du processus d’intégration continue. Focus sur les enjeux et bénéfices.

Un nouveau paradigme

Traditionnellement, les développeurs ne partageaient pas leur travail avec le reste de l’équipe et avançaient  individuellement sur de longues périodes. Ils n’intégraient leurs modifications au code qu’une fois leur travail terminé. Le développeur n’avait pas de vision sur l’impact réel d’une mise à jour sur l’ensemble de l’application. En conséquence, on ne peut identifier les problèmes qu’en bout de chaîne et il est difficile de les localiser précisément, retardant la livraison des mises à jour.

De leur côté, les directions opérationnelles doivent attendre parfois plusieurs mois que les tests et le déploiement soient enfin satisfaisants pour répondre à un besoin utilisateur… qui a probablement déjà évolué. Les deux équipes, développement et opérations ne partagent pas les mêmes objectifs et donc n’ont pas les mêmes priorités.

Sur le papier les exigences du logiciel sont claires, définies à l’avance et stables. Les développeurs s’occupent du code, les équipes opérationnelles de sa mise en œuvre sur les systèmes de l’entreprise. Sur le papier…

Dans le monde réel l’informatique évolue trop rapidement pour permettre de conserver un cahier des charges fixe tout au long du projet. Dans le cadre d’un éditeur de logiciel, le « projet » ne se termine jamais ! Les logiciels doivent pouvoir être mis sur le marché plus rapidement, mais ils doivent aussi pouvoir évoluer constamment. De nouvelles fonctions doivent pouvoir être ajoutées le plus simplement possible, et les bugs découverts doivent pouvoir être corrigés. Les nouveautés ne doivent pas casser l’existant et prendre en compte toutes les configurations et cas possibles. Il n’y a plus de jour «J » pour délivrer le produit comme auparavant.

DevOps et ses pratiques (dont l’innovation continue) visent à mettre fin à cette bataille entre Dev et Ops – pour parvenir à l’équilibre entre innovation et stabilité.

DevOps : un meilleur dialogue entre les équipes

La démarche DevOps consiste à mettre en place un processus global impliquant tous les intéressés quel que soit leur rôle initial. Fini les individus isolés et hyper-spécialisés, les équipes de développement et d’exploitation travaillent en commun sur tout le cycle de vie d’une application, de sa conception et son test jusqu’à son déploiement et à son exploitation.

Les équipes partagent de nombreuses responsabilités et combinent leurs workflows. Cela leur permet de limiter les pertes d’efficacité et de gagner du temps.

Dominique Eav – Chef d’orchestre de la qualité BlueMind

« Chez BlueMind personne n’avance seul dans son coin. Nous cultivons la collaboration et le partage pour favoriser l’efficacité opérationnelle. Nous avons un objectif commun et un plan – défendu par le product ou feature owner – pour l’atteindre ensemble. Toute l’équipe peut suivre les projets, les idées et les difficultés de chacun. »

Ce temps passé à partager les savoir-faire, idées et connaissances doit être largement rentabilisé par l’efficacité gagnée dans la qualité des livraisons, l’anticipation des problèmes/erreurs et la rapidité des dépannages.

Intégrer en continu

Expliquée simplement, l’intégration consiste à rassembler des morceaux de code et à les faire fonctionner ensemble. Souvent, c’est un vrai sacerdoce ! En effet, les projets et les environnements sont nombreux, chaque environnement impliquant une organisation différente du module concerné, des étapes de construction, de test, de validation et de déploiement. L’intégration continue permet de résoudre ces problèmes en faisant collaborer tous les acteurs d’un projet du développement à l’exploitation.

L’intégration continue désigne l’ensemble des pratiques qui permettent aux développeurs d’intégrer régulièrement leurs modifications de code à un référentiel centralisé, de créer et mener automatiquement des sessions de test automatisés, puis de déployer les résultats du build si les voyants sont au vert. Ce processus permet de repérer et corriger plus rapidement les bugs, d’améliorer la qualité et de réduire les temps de validation et de publication de nouvelles mises à jour.

Historique des résultats de tests.
Pour un test donné on voit ce qu’il se passe maintenant et l’historique, un FAIL sur un test qui passait auparavant est signe d’une régression

Elle  permet de vérifier, à chaque modification du code source, que le résultat ne produit pas de régression ou de défaut dans les parties non modifiées de l’application. Les bugs sont identifiés et donc corrigés plus rapidement, les temps de validation et de publication sont réduits et bien entendu la qualité finale est améliorée.

« Nous utilisons largement le principe de pull request. Il s’agit d’un mécanisme permettant à un développeur de partager et valider son travail sans qu’il ne soit forcément terminé. Le développeur peut proposer à tout moment une pull request pour solliciter une revue des personnes impliquées. C’est beaucoup plus qu’une simple validation – il s’agit d’une vraie discussion sur les partis pris techniques de la fonctionnalité proposée. Ainsi nous nous assurons d’une part que l’ensemble de l’équipe puisse suivre les évolutions techniques et d’autre part de l’intégrité des choix »

— Dominique Eav responsable qualité BlueMind.

Tableau de bord sur le build d’une branche (master)
Ce diagramme présente les résultats de tests, les différentes étapes du build et les builds précédents

L’automatisation : clé de voûte de l’intégration continue

Compilation, tests unitaires et fonctionnels, validation produit, tests de performance… sont des activités essentielles mais chronophages, sans parler de l’erreur humaine, toujours possible. Le principe de l’intégration continue repose sur leur automatisation pour gagner du temps et assurer toujours le meilleur niveau de qualité possible.

Ainsi, dès que le développeur produit du code, l’outil vérifie automatiquement qu’il respecte les règles communes mises en place pour l’ensemble de l’équipe. Cette procédure garantit la qualité du code produit et sa stabilité dans le temps par le respect des bonnes pratiques de développement.

Cet outil d’analyse du code permet de voir la couverture de test sur le code. Il faut tendre vers la plus grande couverture possible.

BlueMind utilise Jenkins pour piloter sa chaîne d’intégration continue. Ce logiciel permet de tester et de rapporter les changements effectués sur une large base de code en temps réel pour détecter rapidement les problèmes.

Jenkins nous permet de construire et tester nos branches de développement (features ou corrections), dont les changements intègrent en continu nos branches de release (3.0, 3.5, 4.0), et ce sur toutes les distributions linux supportées (8 pour BlueMind 3.5.9). Le coeur de BlueMind comprend plus de 500 modules, et interagit avec de nombreux AddOns que l’on retrouve sur le Marketplace, eux aussi construits, testés et déployés par notre chaîne d’intégration continue, avec les mêmes contraintes de compatibilité et de qualité. Plus de 3000 tests sont réalisés sur chaque build. Ce degré de complexité serait impossible à gérer manuellement ! Toute l’intelligence de l’intégration continue réside dans l’enchaînement automatique des différentes tâches, dans une logique d’industrialisation des processus.

« Nous avons une approche consensuelle et pragmatique. Nous mettons en œuvre et améliorons nos processus de façon à faciliter la vie des membres de l’équipe, pas pour répondre à un cahier des charges qui nous serait imposé. L’automatisation qui en résulte permet d’aller vite et de faire émerger les éventuels problèmes au plus tôt. Chaque brique de notre chaîne d’intégration continue est une ceinture de sécurité »

— Dominique Eav responsable qualité BlueMind.

Cet outil d’analyse statique de code qui examine les différentes classes, mesure la dette technique c’est à dire le temps nécessaire pour corriger les problèmes que présente telle ou telle partie du code.

En plus de supprimer des tâches fastidieuses, cette automatisation permet de fiabiliser le processus de déploiement tout en augmentant la fréquence des livraisons. Les équipes peuvent se consacrer à améliorer les fonctions existantes ou assurer un suivi de qualité plutôt que d’effectuer des tests manuellement.

Des bénéfices concrets

L’intégration continue fait gagner énormément de temps aux équipes de développement puisque chaque modification du logiciel est immédiatement testée. Un code compilé régulièrement permet d’identifier rapidement les modifications qui posent problème en cas d’erreur. Le développeur a un aperçu rapide des régressions qu’il a causé. Les incompatibilités entre le logiciel et l’écosystème dans lequel il devra évoluer sont elles aussi repérées très tôt.

Durant tout le processus de développement et de déploiement, toute l’équipe collabore étroitement dans un but commun : la réussite du projet dans son intégralité, et pas uniquement de leur partie.

Lorsque toute l’équipe de projet est agile, le développement d’une nouvelle fonctionnalité ou la correction d’un bug peuvent être rapidement mis en production – ou annulés si nécessaire. Une version fonctionnelle du logiciel est toujours disponible et il n’est pas utile d’attendre que le logiciel soit mis en production pour s’apercevoir qu’il ne fonctionne pas. Dans le cas de BlueMind, nous mettons d’abord ces nouvelles fonctionnalités ou correctifs en production en interne. Un procédé que l’on appelle « eating your own dog food« , ce qui signifie que nous sommes les premiers utilisateurs de notre solution.

Côté client, l’intégration continue permet de livrer plus rapidement et plus fréquemment des mises à jour tout en garantissant le plus haut niveau de qualité possible.

Pour conclure

Installer un ordonnanceur comme Jenkins n’est pas suffisant pour faire de l’intégration continue. Comme le stipule le Manifesto de l’Agilité logicielle, les individus et les interactions passent avant les processus et les outils. Une démarche DevOps relève donc de la responsabilité de tous. La culture DevOps implique d’adopter une approche transparente basée sur la communication et la collaboration entre les équipes informatiques/opérationnelles et de développement. DevOps est une excellente approche pour les entreprises qui innovent sans cesse !

BlueMind s’est structurée dès le départ autour de ces principes pour assurer le meilleur niveau de qualité dans un environnement complexe. Grâce à cette agilité nous pouvons livrer des produits stables et performants à travers des processus industrialisés entre exploitation et développement.

Suivez nous :

Sécuriser BlueMind 3.5 avec un certificat Let’s Encrypt

L’activité du jour : la mise en place d’un certificat Let’s Encrypt sur notre serveur de mail BlueMind en version 3.5.

L’intérêt

Let’s Encrypt permet de disposer d’un certificat gratuit et reconnu par les navigateurs. L’intérêt principal (dans l’esprit DevOps) est d’automatiser le processus de gestion des certificats parfois complexe.

Tout est automatique : la création, l’installation et surtout le renouvellement du certificat. Une fois mis en place, on peut l’oublier et le laisser se débrouiller tout seul.

Préparation du serveur web

Avant de générer un certificat, le serveur Let’s Encrypt va vérifier que le nom DNS du certificat vous appartient bien.

Le serveur va demander au client Let’s Encrypt de positionner une ressource à l’URL /.well-known/acme-challenge/ de votre serveur BlueMind. Il faut donc adapter la configuration du serveur nginx BlueMind pour permettre cet échange.

Pour plus d’informations sur le fonctionnement du protocole, vous pouvez consulter la page https://letsencrypt.org/how-it-works/

Le serveur web nginx BlueMind permet d’ajouter des fichiers de configuration qui ne seront pas écrasés lors de mises à jour dans le répertoire /etc/nginx/bm-local.d/. Le contenu des échanges avec le serveur Let’s Encrypt sera contenu dans le répertoire /var/www/letsencrypt sur le serveur :

  •  Le fichier /etc/nginx/bm-local.d/letsencrypt-acme-challenge.conf est ajouté avec le contenu suivant :
    location ^~ /.well-known/acme-challenge/ {
      default_type "text/plain";
      root /var/www/letsencrypt;
    }
  •  Enfin le serveur NGINX doit être redémarré (exemple sur Ubuntu 16.04) :
    systemctl reload bm-nginx

Génération du certificat

La 1ère étape est d’installer le client Let’s Encrypt certbot-auto :

sudo curl https://dl.eff.org/certbot-auto > /opt/letsencrypt/certbot-auto
sudo chmod +x /opt/letsencrypt/certbot-auto

La génération du certificat nécessite de fournir quelques informations :

  • L’acceptation des conditions d’utilisation
  • Le chemin pour déposer les ressources du challenge ACME
  • Le nom de domaine pour lequel le certificat est généré (potentiellement plusieurs)
  • L’adresse e-mail pour recevoir les notifications d’expiration et autres

Dans un souci d’automatisation, ces informations sont passées directement en ligne de commande et sans interactions (-n). Au 1er lancement, certbot-auto va installer automatiquement ses dépendances.

sudo ./certbot-auto certonly -n -a webroot --webroot-path=/var/www/letsencrypt -d <FQDN du serveur BM> -m <votre e-mail> --agree-tos

Si tout se passe bien, le certificat et les clés sont générés dans le repertoire /etc/letsencrypt/live/<FQDN du serveur BM>/

Installation du certificat dans l’environnement BlueMind

Maintenant que le certificat est généré, il faut configurer NGINX pour l’utiliser. Pour rester le plus transparent possible au niveau de BlueMind et éviter de tout casser lors des mises à jour, l’option choisie consiste à ré-écrire le certificat utilisé par BlueMind. Attention : pensez à sauver son ancien certificat si besoin.

Le script suivant va permettre de faire cette modification (il sera également utilisé pour le renouvellement) :

#!/bin/bash
cat /etc/letsencrypt/live/fqdn/privkey.pem /etc/letsencrypt/live/fqdn/fullchain.pem > /etc/ssl/certs/bm_cert.pem
systemctl reload postfix
systemctl reload bm-nginx

Ça y est, le serveur BlueMind est à présent sécurisé par un certificat reconnu !

Automatisation du renouvellement

Les certificats Let’s Encrypt ont une faible durée de vie (3 mois) mais tout est prévu dans le client pour leur renouvellement. De plus, certbot-auto permet de lancer une commande en cas de renouvellement réussi, ce qui va permettre d’appeler automatiquement le script précédent.

Une entrée crontab est ajoutée pour automatiser tout le processus :

0 0 * * 0 /opt/letsencrypt/certbot-auto renew --renew-hook "bash letsencrypt_posthook.sh" >> /var/log/letsencrypt/renew.log

Voilà, vous pouvez tranquillement passer à autre chose.

Article rédigé et publié par Julien Lavesque pour Obectif Libre

Suivez nous :

Intégration de BlueMind avec le web SSO LemonLDAP, par Worteks

blog_post_llng_bluemind_banner_2

Notre partenaire Worteks a publié un article sur l’intégration de BlueMind avec l’outil d’authentification unique web LemonLDAP-NG que nous reproduisons ici. Pour les contacter : info@worteks.com

Nous avons retenu FreeIPA (Identity Manager Software) comme brique centrale de l’infrastructure chargée d’assurer la fonction d’annuaire et d’authentification centralisée. Notre choix s’est ensuite porté sur LemonLDAP-NG en tant que portail d’authentification unique sur lequel nous venons authentifier nos services, dont notre solution de messagerie BlueMind.

Prérequis

Afin d’effectuer les manipulations que nous vous présentons, vous devez disposer d’une instance fonctionnelle de LemonLDAP et de BlueMind avec un backend d’utilisateurs LDAP commun.

Installation de LemonLDAP-NG.

Installation de BlueMind.

Nous verrons l’installation et la configuration de ces produits dans de futurs billets de blog.

Step 1 : LemonLDAP-NG

Dans LemonLDAP, il faut activer et configurer le module CAS ici : General Parameters -> Issuer modules -> CAS

worteks_llng_cas_fr

Une fois dans le module CAS, vous devez configurer les options de la façon suivante :

  • Activation: On # Activation du module CAS
  • Path: ^/cas/ # URL d’appel au module CAS
  • Use rule: On # Utilisation sans restriction
  • Options
    • CAS login: # Champ de session utilisé pour le login CAS. Par défaut, l’uid.
    • CAS exported attributes: # Attributs que l’on souhaite transmettre à l’application externe
      • mail $mail
      • uid $uid
    • Politique de contrôle d'accès: None # Définit le type de contrôle d’accès fait par le service CAS
    • Nom du module des session CAS: Apache::Session::File # Méthode de stockage des sessions CAS
    • Options du module des sessions CAS: # Options relatives à la méthode de stockage
      • Directory /var/lib/lemonldap-ng/sessions # Emplacement des fichiers de session
      • LockDirectory /var/lib/lemonldap-ng/sessions/lock # Emplacement des fichiers de lock
      • generateModule Lemonldap::NG::Common::Apache::Session::Generate::SHA256 # Module de génération des sessions

Il faut maintenant ajouter un nouveau Virtual Host via Virtual Hosts -> Add virtualhost -> mail.company.tld en adaptant les options suivantes à votre propre environnement :

  • mail.company.tld # URL de votre webmail Bluemind
    • Access rule
      • Default rule:
        • default accept # Pas de filtrage d’utilisateurs sur ce VirtualHost
    • Exported headers: # Pas de headers HTTP spécifiques exportés
    • Form replay: # Pas de rejeu de formulaire
    • Options:
      • Port: # Port spécifique
        • Value -1
      • HTTPS: On # Activation du HTTPS
      • Maintenance mode: Off # Activation du mode maintenance
      • Aliases: # URL aliases

Si comme nous, vous souhaitez utiliser LemonLDAP-NG comme portail applicatif, vous pouvez ajouter des applications à l’interface via General Parameters -> Portal -> Menu -> Categories and applications
Pour ajoutez Bluemind, choisissez une categorie, puis configurer l’application comme ci-dessous :

  • Name: Bluemind
  • Description: Email Web Client
  • URI: mail.company.tld
  • Logo: mailappt.png
  • Display application: Enabled

Step 2 : Bluemind

Pour pouvoir utiliser l’authentification CAS de Bluemind, il faut installer le plugin adéquat :

    • Sous Debian-like :
apt install bm-plugin-hps-cas
    • Sous RedHat-like :
yum install bm-plugin-hps-cas

Il faut redémarrer les services de Bluemind pour prendre en compte l’installation du plugin :

bmctl restart

Pour activer l’authentification CAS, vous avez deux options (au choix) :

  • via l’interface d’administration, en tant qu’admin0

blog_post_llng_bluemind_screenshot

  • ou en ligne de commande
    root@mail:~# vim /etc/bm/bm.ini
    [global]
    ...
    casUrl = https://cas.domain.tld/cas/
    casDomain = domain.tld
    

Après ces modifications, il faut relancer le service hps, en charge de l’authentification, de Bluemind :

service bm-hps restart

L’authentification est maintenant déléguée au LemonLDAP. Il n’est donc plus possible d’accéder à l’interface d’authentification de BlueMind.
Pour utiliser l’authentification native de Bluemind (pour l’utilisateur admin0 par exemple), il faut utiliser l’URL suivante :

https://mail.domain.tld/native

 

Sources :

Suivez nous :

Intégrez facilement vos événements Doodle à BlueMind !

BlueMind v3.5, permet à chaque utilisateur de se créer plusieurs agendas pour organiser son activité.

Ces agendas peuvent être gérés manuellement mais aussi issus d’une source externe de calendriers, tels que Doodle ou Gmail.

Voici 4 nouveaux usages courants de cette fonctionnalité :

  • l’affichage de vos événements Doodle directement dans votre agenda
  • la récupération de vos disponibilités BlueMind dans les applications Doodle
  • l’affichage d’un agenda externe dans BlueMind, sans qu’il impacte vos disponibilités
  • la création d’un calendrier partagé alimenté depuis une source externe (tels que les congés scolaires par exemple)

agenda_doodle_bm

Cet article aborde les 2 premiers.

Continuer la lecture de « Intégrez facilement vos événements Doodle à BlueMind ! »

Suivez nous :

Intégration BlueMind et Salesforce

Un des points forts de BlueMind est son ouverture. Elle permet l’intégration avec d’autres briques et applications du système d’information.
Un exemple assez classique est l’intégration avec les logiciels de relation client (Customer Relationship Management ou CRM) tels qu’E-deal et Salesforce.

salesforce_bm_focus

Je présente ici l’intégration faite avec le CRM Salesforce en l’illustrant par un cas client.

Continuer la lecture de « Intégration BlueMind et Salesforce »

Suivez nous :