Méthodologie Agile, déploiement continu et intégration continu, DevOps, autant de nouvelles méthodes qui répondent aux besoins d’industrialiser les tests, de fluidifier les déploiements en production et de rapprocher les équipes IT se sont progressivement affirmés.

13-devops1La SSII Smile spécialisée dans l’Open Source vient de publier un livre blanc dans lequel elle analyse de plus de 15 solutions open source de déploiement (Ansible, Puppet, Chef…), d’intégration continue (Jenkins, Gitlab-Ci, …) et de conteneurs (Docker, Kubernetes, Openshift, Mesos).

Pour télécharger le livre blanc, cliquer ici

Les termes Continuous Delivery (CD) et Continuous Integration (CI), respectivement en français Déploiement continu et Intégration continue sont très présents depuis quelques années. Dans la méthodologie Agile ces deux concepts s’intègrent de manière quasi-naturelle et bien souvent les équipes construisent leurs logiciels en suivant ces principes sans en avoir pleinement conscience. Le but est de permettre l’évolution de projets de manière fluide entre la production de code, et le déploiement final.

La démarche DevOps se base sur le fait que le développement logiciel et son aspect production, opérationnel, sont fortement imbriqués, et qu’ils doivent par conséquent être gérés ensemble, et ce, dès le début d’un projet.

On peut définir 3 groupes d’outils qui s’intègrent dans le processus de Continuous Delivery :

  • Le SCM ou « Source Control Management » pour « Gestion de contrôle de Sources » qui permet de rassembler le code source, les branches et les versions
  • la PIC pour « Plate-forme d’intégration continue » qui va interfacer le VCS et exécuter une série de tests, bloquer les fusions de branches en cas de problème (et forcer la revue de code), vérifier les conventions de code, et générer des rapports
  • La plate-forme de livraison qui peut être intégrée à la PIC, elle permet de contrôler une version à livrer et provisionner les cibles de production (déploiement dans un parc informatique, sur un serveur ou sur un cluster)

Ci-dessous un rapide aperçu des principales solutions qui permettront de mettre en œuvre ces nouveaux principes et qui sont analysés dans ce livre blanc.

Gestion des sources

SVN
Subversion (SVN) est un système de gestion de version centralisé. Issu de CVS, son développement est initialisé en 2000 par la société Collabnet. Il est devenu officiellement un projet de la fondation

Git
Git est un système de gestion de versionnement décentralisé (« DVCS »). Il est notamment utilisé pour le noyau Linux ou pour PHP. C’est un logiciel libre créé par Linus Torvalds en 2005.

Mercurial
Mercurial est un système de gestion de concurrence de version décentralisé à l’instar de Git. Il existe peu de différences entre Git et Mercurial. La ligne de commande offre presque les mêmes opérations à quelques différences près, et tous les deux permettent de taguer, de créer des branches, de les fusionner et créer des pull-requests.

Plateformes d’intégration continue

Les services d’intégration continue sont des points centraux et surtout déterminants pour que le flux de livraison soit livrable. Car si les développeurs intègrent les tests unitaires et « end-to-end », il faut qu’un service s’assure pleinement de leur bon déroulement et permette de faire un rapport des régressions. Certaines plateformes sont orientées pour un seul langage, d’autres sont intégrées dans l’outil de gestion de source. Il en existe un certain nombre, en voici quelques-unes qui ont mérité notre attention.

Jenkins
Jenkins est un outil d’intégration continue développé en Java descendant du projet Hudson. Jenkins propose avant tout une gestion de tâche automatisée sur des projets enregistrés sur la plateforme.

Gitlab – Gitlab-CI
Avec Git, il est très intéressant d’avoir une interface de gestion des projets via une interface puissante. Ne serait-ce que pour visualiser les branches, gérer les pull-requests ou lire plus facilement les logs. GitHub a largement conquis la communauté en proposant un hébergement des sources (publiques ou privées) de projets depuis près d’une décennie. Aujourd’hui, GitLab propose une interface qui peut être intégrée sur les serveurs internes et pratiquement toutes les fonctionnalités de GitHub

GitLab se décline en deux versions :

  • GitLab CE Community Edition – version libre et communautaire
  • GitLab EE Enterprise Edition – version sous licence propriétaire depuis 2014

Strider

StriderCD est une plateforme d’intégration qui a pour particularité d’être développée en NodeJS et utilise MongoDB pour la persistance. Les principaux avantages de Strider sont sa faible consommation mémoire et CPU, ses plugins permettant de lancer les constructions et tests de différentes manières, et une installation simple via NPM6.

Strider fournit aussi des plugins qui permettent de s’intégrer à différents fournisseurs tels que BitBucket, GitHub, ou des dépôts privés. Son interface est légère et fluide.

Gestion des environnements

Fabric
Fabric est un outil et une librairie Python qui permet le déploiement et la gestion de tâches administratives locales ou via SSH sur différents serveurs. Plus bas niveau que Ansible ou Chef, Fabric trouve son intérêt dans le fait qu’un fabfile, est codé en Python, et par conséquent permet l’utilisation de modules externes tels que « requests » ou « re » (module de gestion d’expressions régulières) et ainsi de pouvoir créer des procédures plus complexes.

Ansible
Ansible est un moteur d’automatisation de déploiement et d’approvisionnement de Cloud, gestion de configuration, déploiement d’applications, orchestration inter-services, etc.

L’un des intérêts majeurs de Ansible est la « non utilisation d’agent », en d’autres termes les machines cibles n’ont pas besoin d’avoir de service spécifique pour être provisionnées par Ansible. Il utilise SSH par défaut et se sert de « sudo » pour avoir certains droits si besoin (selon la con_guration de la tâche ou du rôle).

Go Continuous Delivery

La solution Go-CD 11 est éditée par ThoughtWorks, une organisation précurseur sur le déploiement continu et l’architecture logicielle java. Go-CD est construit autour d’une modélisation très puissante :

  • des tâches d’intégration
  • des pipelines de déploiement
  • et des environnements

Chef
Chef est un outil d’automatisation d’infrastructure écrit en Ruby, dont le fonctionnement est analogue à Puppet. Il est multi-plateforme et permet entre autres choses :

  • le déploiement de configurations
  • l’analyse et les rapports d’états de déploiement

Puppet
Puppet est un outil d’automatisation d’infrastructure très largement répandu. Puppet est réalisé en Ruby et la version communautaire est disponible sous licence GPL.

Gestion des conteneurs et des clusters

Docker, Docker Compose, Docker Swarm
Développé par le français Solomon Hykes, logiciel libre développé en Go, Docker a rapidement conquis les administrateurs systèmes ainsi que les développeurs. Docker est une solution de gestion d’images et de conteneurs applicatifs.

Docker-Compose
Afin de simplifier la création de conteneur et les liens entre eux, un outil nommé « dockercompose », initialement nommé fig », est aujourd’hui utilisé

MesOS
Mesos est un gestionnaire de cluster développé par la fondation Apache. Il « fournit une isolation efficace des ressources et le partage entre les applications distribuées, ou des frameworks ».

Kubernetes
Kubernetes est un gestionnaire complet de provisionnement de conteneurs sur un cluster. En d’autres termes, Kubernetes associé à Docker permet d’avoir un PaaS en simpli_ant sa mise en oeuvre.

OpenShift
OpenShift est une plateforme PaaS développée par RedHat, qui propose aussi la solution en mode SaaS. Le projet est open source et se nomme Openshift Origin

Openshift Origin est fortement attaché à trois briques :

  • Docker en tant que gestionnaire de conteneur applicatif
  • Kubernetes pour l’orchestration des applications et la gestion de cluster
  • Atomic qui permet le démarrage rapide de projets, de gérer des hôtes légers dont les services sont démarrés sous Docker, un gestionnaire de paquets, en bref c’est un projet à part entière.

CoreOS
CoreOS est une distribution Linux légère incluant les services fleet, etcd, flanneld et se basant sur le principe de systemd. Une de ses particularités est de ne pas proposer de gestionnaire de paquets. Docker est installé par défaut sur la plateforme mais CoreOS propose aussi son propre système de conteneur nommé « Rockit » ou « rkt ».