RSpec-Puppet. Enfin, il existe aussi des outils éditeurs pour répondre à ces enjeux.
L'idée est donc de tester un système complet et pas seulement une application. Retenons surtout que la technologie choisie pour écrire les tests importe peu, c'est encore une fois la démarche qui importe. Et on peut y aller étape par étape, par exemple
Bref vous l'aurez compris, il y a un peu de travail mais c'est aussi le fait de savoir que votre SI est testé de haut en bas qui va vous donner fiabilité, productivité et surtout vous permettre de faire du Continous Delivery... jusqu'à la prod ! De plus, mettre en place la partie monitoring au préalable (en automatisant à nouveau) permettra de valider son fonctionnement avant la prod est aussi une première forme de tests => si je déploie une plateforme de tests, et qu'une fois le déploiement terminé son monitoring est au vert partout, c'est déjà plutôt bon signe! On peut alors résumer ça autrement : les questions que se sont posées au préalable les devs puis l’intégration pour savoir si une plateforme est up and running ont forcément amené à des résultats qui doivent être réutilisées plutôt que ré-inventées par les Ops.
Le workflow de chaîne d'intégration côté infrastructure ressemble fortement à celui d'une application, on commit du code, on le déploie, on passe des tests dessus ... rien de bien nouveau !
La variation réside dans le fait qu'il faut provisionner / déprovisionner des machines au lieu d'uniquement déployer des applicatifs dans un environnement quasi-statique.
Pour une seule machine (mais le schéma est le même si on a N machines) cela peut se résumer à ces étapes :
On peut alors faire un résumé d'un déploiement allant des infrastructures jusqu'aux applications par le schéma suivant, ici sur une stack classique : Hyperviseur VMWare, Chef Solo piloté par Capistrano. Toutefois vous verrez que ce schéma peut très facilement s'adapter à du Chef-server du Puppet .. Dans ce cas nous utilisons RVC pour piloter les hyperviseurs ( RVC = Ruby vSphere Client). Peu importe l'hyperviseur, on fait la même chose sur du LXC, du KVM ... Le tout est d'avoir une "api" pour le piloter.
On voit ici qu'on va tout tester : les scripts de création de machine virtuelles, l'installation d'OS automatisée, la configuration des OS via l'outil de GConf (Gestion de configuration), les scripts de déploiements, puis finalement l'applicatif.
Ensuite il faut faire passer ces mêmes étapes à tous les niveaux de promotion d’une version de la plateforme, en pilotant l'ensemble avec un Jenkins par exemple.
Les mécanismes évoqués à l’instant sont déjà utilisés côté développement mais pour ainsi dire jamais sur un SI complet, or c'est cela qui va nous permettre d'arriver à une réelle intégration continue côté infrastructure.
Et oui dès qu'on parle de code ce sujet revient vite sur la table. On ne va pas refaire l'article de la nécessité de faire de la qualité sur son code mais sachez que le code utilisé côté Infrastructure peut aussi (doit aussi...) faire l'objet d'analyse de qualité. Pour ça il existe des outils tels que Foodcritic pour Chef. Puppet est aussi bien fourni (voir dans cet article de Puppetlabs).
Pour notre framework opensource de cookbook chef nous utilisons Travis pour faire passer Foodcritic (un outil de qualité pour le code chef) régulièrement sur le code. De plus, nous avons un jenkins qui reconstruit régulièrement des VMs "générique", les installe puis lance nos tests. Cela nous permet de nous assurer de la stabilité de nos cookbooks Chef.
Il peut aussi être très utile de reconstruire (via des Nightly Build) des plateformes types toutes les nuits pour valider que tout fonctionne et qu'on peut encaisser n'importe quel crash ou mise à jour majeure nécessitant une reconstruction complète d'une partie ou de l'intégralité d'une plateforme. Nous mettons en place cette méthode chaque fois que nous pouvons disposer de ressources (hyperviseur) pour le faire, nous avons aussi parfois utilisé Amazon EC2 pour répondre à ce besoin. En effet étant donné que les VMs utilisées pour les tests automatisées ont une durée de vie courte, le coût est léger et maîtrisable.
Pour finir, les outils existent pour répondre à toutes les problématiques d'une infrastructure entièrement automatisée et testée. La difficulté réside plus dans l'intégration et l'assemblage de ces outils mais aussi et surtout dans la démarche qu'il faut établir et adapter à son besoin avant de commencer le moindre développement.
Nous avons entièrement migré le SI d'OCTO sous ce paradigme. Nous avons aussi accompagné plusieurs clients vers cette approche. C'est ce qui nous a amené au développement de frameworks open source tel que master-chef, un ensemble de cookbook pour chef très courants, master-cap un framework capistrano avancé : gestion de topologie, intégration chef dans cap ... Et finalement vous pourrez trouver des exemples de ces tests automatisés dans master-chef-tests, tout ceci se passe sur ce compte GitHub : Kitchenware.
Enfin, retenez surtout qu'Infrastructure as Code rend de nombreux services mais pour vous assurer de faire évoluer sereinement vos "cookbooks" vous devez les entourer (comme dans un cycle de développement classique), d'un harnais de tests automatisés !