Qu'est-ce que le CI/CD
CI/CD (Continuous Integration / Continuous Delivery) est une méthodologie qui permet d'optimiser les étapes de développement logiciel en se basant sur des processus agiles et un pipeline automatisé de bout en bout.
Quels sont les avantages du CI/CD pour votre projet Drupal ?
1. Réduire les risques
L'utilisation de pipelines CI/CD augmente considérablement l'efficacité et la vitesse de détection et de correction des bugs de code au début du processus de développement en automatisant la tâche. La correction de ces risques se produit désormais presque en temps réel, ce qui réduit considérablement le risque de publication de code bogué qui peut avoir un impact sur les mises en production.
2. Livraison plus rapide
L'automatisation via les pipelines CI/CD accélère les calendriers de livraison en permettant aux équipes de créer, tester et déployer rapidement des fonctionnalités avec un degré élevé de confiance.
Des délais de livraison plus rapides et plus efficaces provoquent des délais d'exécution accélérés et des livraisons plus fiables.
3. QA accrue
L'utilisation d'un pipeline d'intégration continue offre une meilleure visibilité aux équipes chargées de l'assurance qualité dans le processus de développement et permet des interventions plus tôt dans le cycle de développement, ce qui conduit à un code plus stable et de meilleure qualité. Le résultat est un produit final plus stable et offrant une assurance qualité accrue.
4. Transparence accrue (facultatif mais peut être pertinent pour certains types de clients)
L'adoption des processus CI/CD conduit à plus de transparence et de clarté tout au long du cycle de vie de développement.
Les journaux et rapports générés à toutes les étapes permettent une meilleure compréhension dans le processus de développement.
5. Couverture automatisée du code et sécurité du code
Une partie intégrante du pipeline d'automatisation consiste à fournir une couverture de code et de sécurité pour le livrable. Les sites web et les applications modernes sont composés de plusieurs couches de code et de bibliothèques, ce qui entraîne une complexité supplémentaire notamment pour le suivi. La couverture automatisée du code et de la sécurité dans le pipeline CI/CD offre à l'équipe de développement et aux clients une vision plus claire du statut de sécurité du produit final et une plus grande transparence dans le travail nécessaire pour se protéger contre les vulnérabilités critiques qui peuvent affecter les versions de production.
6. Alignement de la conformité
L'automatisation de l'analyse de sécurité et de la couverture du code permet un alignement plus étroit avec les normes de conformité requises par certaines industries. Ceux-ci incluent, entre autres, le top 10 de l'OWASP et les dernières alertes CVE pour les bibliothèques tierces populaires.
Où en sommes-nous ?
2 pipelines en activité
Nous avons fait le choix de configurer et d'utiliser 2 pipelines indépendants, qui correspondent à la typologie de projets que nous traitons avec Drupal :
- Un pipeline de "build" - Excusez l'anglicisme - qui concerne nos projets de développement ex-nihilo (conception, développement ou refonte de sites ou d'applications Drupal / Symfony).
Ce pipeline organise des tests dans des environnements proches ou en conditions réelles. Les points de contrôle sont très strictes pour assurer une faible marge d’erreur, ou une empreinte de sécurité.
- Un pipeline d'audit qui concerne les projets que nous reprenons, souvent en maintenance, qui sont déjà en production et qui ont été développés par d'autres équipe ou agences Drupal.
Le pipeline d'audit peut être utilisé pour rapidement déterminer les standards Drupal, de sécurité et le niveau de maintenabilité d’un nouveau projet.
Jenkins Architecture
L'architecture Jenkins proposée est composée des composants de haut niveau suivants :
- Jenkins Master / Worker Nodes : coordonne et exécute les tâches de build.
- Services supportés :
- Git Server ;
- OWASP (Vérificateur de dépendances - CLI) ;
- SonarQube (Web Service) ;
- PHP Deprecation Detector (CLI) ;
Le pipeline de build travaille sur un projet dont les composants sont prêts à être intégrés et testés dans des conditions et des environnements proches ou réels. Les contrôles dans le pipeline de "build" doivent être plus stricts pour garantir une moindre erreur et une empreinte de sécurité lorsque déployé dans l'environnement de production.
SonarQube
SonarQube génère un rapport qui évalue la fiabilité du code (les bugs), la sécurité (les vulnérabilités et les hotspots de sécurité), et la maintenabilité du site (la dette technique). SonarQube peut être connecté à VSCode via une extension SonarLint. Chaque développeur dispose de l’extension “SonarLint” dans son IDE/ VSCode.
Paramètres de configuration
Actuellement, les paramètres de construction personnalisables et/ou sélectionnables incluent :
- Sélection d'une version PHP à construire/auditer ;
- Sélection d'une version de Composer ;
- Choix des vérifications de dépendances sur le code source ;
- Utilisation de SonarQube ;
- Définition des propriétés d'environnement liées à une utilisation avec la gestion des fichiers de configuration pour les services PhpStan et Sonarqube.
Tests de sécurité et qualité
Nous utilisons la méthodologie SAST (Static application security testing) et d'autres scanners de couverture de code et de bibliothèque tels que l'outil OWASP Dependency Scanner qui offrent un aperçu détaillé des faiblesses dans le code qui pourraient potentiellement fournir une large surface d'attaque en production si elles ne sont pas détectées tôt.
Dans le cadre du pipeline Jenkins CI/CD proposé, les outils suivants sont utilisés pour fournir des commentaires détaillés sur la qualité du code et le niveau de sécurité :
Outils spécifiques à Drupal
Nous utilisons quelques outils supplémentaires pour vérifier et estimer les mises à jour majeures de nos plateformes Drupal :
- Modules PHPStan nécessaires pour vérifier le code déprécié lors de la mise à niveau de Drupal 8 à Drupal 9 puis Drupal 10.
- PhpDeprecationDetector : Outil utile fournissant une détection plus générale de la dépréciation de PHP7 à PHP8.
Cette architecture et les outils utilisés ne sont pas figés. Nous disposons d'un groupe de travail référent, en charge de l'amélioration des pipelines et de leur diffusion aux équipes de développement. A l'usage, ils permettent de détecter les projets en souffrance qui seront difficilement maintenables et d'en alerter les clients. Ils permettent aussi et surtout d'assurer une meilleure qualité de nos livraisons, de garantir un niveau de sécurité optimal et d'allonger l'espérance de vie de nos projets Drupal.
Pour aller plus loin -Plugins Jenkins intéressants :
OWASP Dependency-Track - SonarQube Scanner - Mattermost Notification - HTML Publisher - NodeJS - Warning Next Generation - Conditional BuildStep - Config File Provider - Environment Injector.