Dans le cadre du travail en livraison continue, il existe de nombreuses solutions de CD. Voici un exemple d'utilisation de Gitlab-CI avec Drupal 8.
Intégration / Livraison continue
Le service d'intégration continue
Gitlab-CI fait parti des derniers arrivant et propose une solution complète, très extensible et pour l'instant sans coût pour mettre en place votre flux de travail avec Drupal 8.
Le principe est simple, à chaque itération (branche, commit ou tag...) vous pouvez lancer un certain nombre de tâches automatisés.
Ces tâches peuvent être du build (téléchargement externe de librairies si vous utilisez Drupal 8 avec Composer), de la verification de code (Standard de Php, standard de vos fichiers Javascript, css ou Sass...), de la vérification de sécurité (Dans votre code ou les dépendances de votre projet) et du déploiement sur vos serveurs de staging, pré-production, production.
Les tâches en intégration continue
En fait les tâches automatisés peuvent être de toute nature, du simple script au programme lancé depuis sa version dockerizé. Gitlab-CI vous fournit l'infrastructure (Serveur Web, Base de données, Serveur NodeJs...) ainsi que des "runners", c'est à dire des machines qui exécuterons vos tâches.
Grâce à Docker et à la virtualisation, pas besoin de mettre en place toute une machine avec les mises à jours et le téléchargement de programmes... Une simple image avec le ou les outils permet le lancement d'une tâche en temps record !
Intégration continue de Drupal 8 avec Gitlab-CI
Voilà pour la théorie, voyons voir ce que cela donne en pratique pour un site Drupal 8 avec ce template de Gitlab-CI avec Drupal 8.
J'ai choisi un flux de travail basique, une branche "testing" pour le build et les tests avec au final un déploiement sur un environnement de test :
Le principe est donc que chaque fois que l'on pousse un commit sur cette branche, tout se déclenche à la chaîne avec des alertes et la possibilité de stopper le processus.
La première partie build correspond à l'installation des fichiers de Drupal avec Composer. On ne place sur le repo que le code custom, la configuration et le template du site.
Ce build permet de tester que tout fonctionne bien, si il passe une deuxième étape permet de lancer tous types de tests pour Drupal 8.
Testing de votre code
Drupal 8 intègre 4 types de tests : Unit, Kernel, Functional, Functional Javascript permettant de tester les différentes parties de votre code. Ces tests utilisent tous Phpunit (Framework de test) et dans certains cas
Depuis Drupal 8.6 on se rapproche également des méthodes de développement frontend plus modernes avec l'intégration de NightwatchJS pour le test de votre code Javascript en direct (sans passer par des fichiers Php de test...)
La partie tests du flux ci dessus intègre également un Security report en utilisant le très pratique programme de Symfony.
Ainsi qu'un Code coverage, c'est une option de Phpunit pour déterminer la quantité de code Php qui possède un test et déterminer si vous couvrez bien la majorité de votre code. L'intérêt étant que Gitlab va être capable d'extrair 581948b2-4459-4328-8919-cbf75d103c1f: filege-report-badge">afficher un badge de résultat comme celui là
Qualité de code
A partir de cette étape, les tâches deviennent commune avec les autres branches, c'est un peu un minimum, voici un flux sur la branche 3.x-dev :
Pour la vérification du code Php on utilisera Code sniffer avec les standards Drupal présents dans le module Coder.
Standards de code css et javascript
Pour la partie lint qui concerne js / css, on utilisera de nouveau les standards Drupal 8.6+ avec Stylelint et Eslint. Pour un projet avec un thème Bootstrap SAss, un petit bonus Sass basé sur des règles Bootstrap avec Sass lint.
Metriques, taille et statistiques
Enfin pour le fun on ajoutera quelque mesures du code avant de pouvoir déployer sur vos environnements. Phpmetrics, Phploc et Pdepend nous donnerons de magnifiques graphes et statistiques à joindre à votre projet !
Livraison continue
Si tout se passe bien les dernières étapes s'occuperont de déployer votre code validé sur vos environnements, de façons automatisée ou manuelle.
Pour cette étape vous avez l'embarras du choix et ce projet ne traite pas vraiment de cette partie. L'exemple donné permet une connection ssh avec clef à votre serveur et ensuite lance un script. De façons basique ce script récupère le projet et devra lancer plusieurs commandes de mise à jour sur votre site (Composer, compass, drush updb, drush entup, drush config:import...).
Montrez moi du code !
Vous trouverez l'intégralité du code utilisé sur ce projet : https://gitlab.com/mog33/gitlab-ci-drupal
Vous trouverez toutes les informations pour mettre en place tout ça sur votre code, avec entre autre comme principal élément ce fichier de configuration.
Aidez moi à mettre ça en place sur mon projet !
Si vous n'avez pas le temps ou les compétences, je peux vous aider par une prestation à mettre en place et personnaliser cette gestion sur votre projet, vous pouvez simplement me contacter.