Vous avez entendu parler de CI/CD, mais vous n’êtes pas sûr de ce que cela signifie ?
L’objectif principal des ingénieurs logiciels est de concevoir du code qui doit être transféré dans un environnement de production, permettant ainsi à l’entreprise utilisatrice d’exploiter le produit. Pour satisfaire les besoins de l’entreprise (souvent désignés par le terme utilisateurs/clients), il est impératif que les produits soient exempts de tout défaut.
La méthode habituelle adoptée par les ingénieurs logiciels consiste à opérer à l’intérieur de branches de développement et à soumettre une requête de fusion, actualisant la branche principale avec les dernières modifications réalisées. Il est devenu courant d’intégrer des tests afin de garantir que les nouvelles modifications n’introduisent aucun bug. Souvent, les développeurs qui travaillent sur une fonctionnalité attendent de l’avoir complètement achevée avant de créer une requête de fusion. Lorsque ce moment arrive, plusieurs problèmes peuvent surgir :
- Ils peuvent passer un temps considérable à harmoniser leur code avec les changements qui ont été introduits dans la branche de production pendant leur période de travail.
- Cette situation peut mener à une succession de conflits de fusion à résoudre.
- Il existe également un risque de perturber la branche de production, affectant ainsi les utilisateurs qui en dépendent, jusqu’à ce que le problème soit identifié et corrigé.
Si vous avez déjà rencontré cette situation, vous conviendrez que cela peut être une expérience frustrante – personne n’apprécie de gaspiller sa journée de travail de cette manière.
Quelle solution pouvons-nous envisager ?
Intégration continue
Pour éviter les complications mentionnées précédemment, les équipes d’ingénierie peuvent mettre en œuvre la méthode appelée intégration continue. Comme son nom le suggère, il s’agit d’intégrer en continu les modifications de code apportées par les développeurs dans la branche principale ou le référentiel partagé. Le code soumis à intégration doit être soumis à une série de tests pour vérifier qu’il ne perturbe pas l’application. L’intégration n’est validée qu’après le succès de ces tests.
Pour illustrer ce principe, prenons l’exemple d’une équipe composée de dix développeurs. Ces développeurs créent localement des branches de développement pour rédiger du code lié à des fonctionnalités spécifiques. Au lieu de soumettre des requêtes de fusion une fois la fonctionnalité achevée, ils préfèrent les soumettre suite à de petites modifications. Par exemple, la création d’une nouvelle fenêtre modale, en supposant que le développeur travaille sur une fonctionnalité de gestion des tâches individuelles. Fidèle au modèle d’intégration continue, le développeur soumet cette petite modification et crée une requête de fusion vers le code principal sans attendre la fin de toute la fonctionnalité de tâche.
Avant que ce nouveau changement ne soit incorporé, une suite de tests doit être exécutée.
Les équipes d’ingénierie logicielle utilisent des outils comme Travis CI pour automatiser ces processus et tests d’intégration. Ces outils permettent l’exécution automatique des tests dès qu’une demande de fusion est soumise vers la branche cible définie lors de la configuration.
Les résultats des tests sont générés, ce qui permet au développeur d’examiner les résultats et d’apporter les ajustements nécessaires. Adhérer à ce modèle d’intégration fréquente de code et effectuer des tests de validation comporte les avantages suivants :
- L’équipe peut plus facilement identifier la cause d’un échec lors de la construction ou des tests, ce qui réduit le risque d’introduire un bug en production.
- Si le processus est automatisé, l’équipe peut se concentrer sur sa productivité.
Il est crucial de comprendre que cette pratique encourage les équipes à soumettre fréquemment du code à la branche principale. Cette approche serait inefficace si les autres membres de l’équipe ne mettaient pas à jour régulièrement leur référentiel local à partir de la branche principale.
Types de tests
Lors de la création des tests d’intégration, voici les différents types pouvant être mis en œuvre :
- Intégration : il combine plusieurs unités de logiciel individuelles et les teste en tant que groupe.
- Unitaire : il vérifie les unités ou les composants individuels du logiciel tels que les méthodes ou fonctions.
- Interface utilisateur : il s’assure que le logiciel fonctionne correctement du point de vue de l’utilisateur final.
- Acceptation : il teste si le logiciel respecte les exigences définies par l’entreprise.
Il est important de noter qu’il n’est pas nécessaire de tester chaque aspect, car certains éléments sont déjà couverts dans le code du développeur.
Outils d’intégration continue
Sans entrer dans les détails techniques, voici quelques outils que vous pouvez commencer à utiliser dans vos projets actuels ou nouveaux :
- Travis CI : très populaire dans le monde open source, il vous promet de tester votre code de manière transparente en quelques minutes.
- Circle CI : il vous donne la puissance, la flexibilité et le contrôle nécessaires pour automatiser votre pipeline, de la vérification jusqu’au déploiement.
- Jenkins : il fournit une multitude d’extensions pour prendre en charge la création, le déploiement et l’automatisation de n’importe quel projet.
Si vous débutez avec Jenkins, il est conseillé de suivre ce cours Udemy pour apprendre l’intégration continue avec Java et .NET.
Déploiement continu
Quel serait l’intérêt de créer une fonctionnalité si elle reste inactive dans le référentiel pendant des semaines ou des mois avant d’être déployée en production ? Même si les équipes d’ingénierie s’efforcent d’intégrer de petites modifications à la branche principale en continu, elles peuvent également déployer ces modifications dans l’environnement de production dès que possible.
Le but du déploiement continu est de rendre les modifications disponibles aux utilisateurs dès qu’elles sont intégrées par les développeurs à la branche principale.
Comme pour l’intégration continue, le déploiement continu repose sur des tests et des contrôles automatisés pour s’assurer que les modifications récemment intégrées sont validées. Le déploiement ne se produit que lorsque ces tests sont concluants.
Pour qu’une équipe puisse tirer profit du déploiement continu, elle doit disposer des éléments suivants :
- Les tests automatisés sont la pierre angulaire de toute stratégie d’ingénierie continue. Dans le cas du déploiement continu, le code à déployer doit satisfaire aux critères établis par l’équipe pour ce qu’elle souhaite proposer aux utilisateurs finaux. Idéalement, si une nouvelle modification est en deçà des exigences, le test devrait échouer, empêchant son intégration. Dans le cas contraire, l’intégration est effectuée.
- Malgré des tests automatisés rigoureux, il peut arriver que des erreurs se glissent dans l’environnement de production. Il est donc crucial que l’équipe puisse annuler une modification – c’est-à-dire, annuler un déploiement. Cette action devrait rétablir le code de production tel qu’il était avant la nouvelle modification.
- Il est essentiel de mettre en place des systèmes de surveillance pour suivre les modifications apportées à l’environnement de production. C’est ainsi que l’équipe peut repérer les erreurs rencontrées par les utilisateurs suite au déploiement.
Les outils mentionnés pour l’intégration continue offrent également des options de configuration pour la mise en place d’un système de déploiement continu. De nombreux autres outils existent et méritent d’être explorés.
Conclusion
La productivité d’une équipe de développement est essentielle à la réussite d’une entreprise. Pour garantir cette productivité, il est nécessaire d’adopter des pratiques qui la favorisent, telles que l’intégration et le déploiement continus.
Grâce à l’intégration continue, les équipes peuvent pousser quotidiennement une quantité significative de code. Une fois cette étape franchie, il devient plus simple de déployer les modifications pour les utilisateurs dès que possible. Le déploiement de ces changements permet de collecter les commentaires des utilisateurs. À terme, l’entreprise est en mesure d’innover grâce à ces retours, ce qui est bénéfique pour tous.
Vous pouvez également explorer comment optimiser et adapter le CI/CD.
Si vous êtes un développeur et souhaitez vous familiariser avec le CI/CD, consultez cet excellent cours.
Avez-vous apprécié la lecture de cet article ? N’hésitez pas à le partager !