Intégration continue

menu icon

Intégration continue

Dans ce guide, vous allez apprendre des informations sur l'intégration continue, une pratique de développement logiciel et DevOps dans laquelle chaque développeur intègre son nouveau code dans la branche principale du code au moins une fois par jour.

Qu'est-ce que l'intégration continue ?

L'intégration continue est un processus de développement logiciel dans lequel les développeurs intègrent le nouveau code qu'ils ont écrit plus fréquemment tout au long du cycle de développement, en l'ajoutant au codebase au moins une fois par jour. Des tests automatisés sont effectués pour chaque itération de la génération, afin d'identifier les problèmes d'intégration en amont, lorsqu'ils sont plus faciles à résoudre, et ce qui permet également d'éviter les problèmes lors de la fusion finale pour la version. Globalement, l'intégration continue permet de rationaliser le processus de génération, et donc de produire des logiciels de meilleure qualité et de mettre en place des calendriers de distribution plus prévisibles.

Intégration continue (CI) versus Distribution continue (CD) versus Déploiement continu

Avec l'intégration continue, chaque développeur intègre son travail à la branche principale du code source au moins une fois par jour (ou, de préférence, plusieurs fois par jour). La distribution continue, autre pratique DevOps, se concentre plutôt sur la distribution de toute modification validée du codebase (mises à jour, corrections de bogues, voire nouvelles fonctionnalités) aux utilisateurs, aussi rapidement et sûrement que possible. Le déploiement continu rationalise encore le processus en utilisant des tests automatisés pour valider les modifications du codebase, ce qui permet d'effectuer des mises à jour plus immédiates.

La distribution continue reprend là où l'intégration continue s'arrête, en automatisant la distribution des applications dans des environnements d'infrastructure sélectionnés. Elle assure l'automatisation de l'introduction des modifications de code dans différents environnements, tels que le développement, les tests et la production.

Avantages

Voici quelques-uns des avantages les plus notables de l'intégration continue :

  • Progrès continus et démontrés pour de meilleurs commentaires en retour
  • Détection précoce et améliorée des erreurs, et métriques qui permettent de les corriger rapidement, parfois dans les minutes qui suivent l'enregistrement
  • Collaboration accrue au sein de l'équipe : tous les membres de l'équipe peuvent modifier le code, intégrer le système et déterminer rapidement les conflits avec d'autres parties du logiciel.
  • Meilleure intégration des systèmes, ce qui réduit les surprises à la fin du cycle de développement des logiciels.
  • Moins de changements parallèles pour la fusion et les tests
  • Réduction du nombre d'erreurs lors des tests du système
  • Systèmes constamment mis à jour pour les tests

CI, Agile et DevOps

Agile

Agile est une pratique de développement de logiciels qui améliore la façon dont les équipes de développement de logiciels s'organisent, s'adaptent aux changements d'exigences et publient des logiciels. Comme l'intégration continue (lien externe à IBM) et le développement Agile (PDF, 153 ko) ont en commun de nombreuses caractéristiques (par exemple, l'automatisation des tests), il peut être utile de parler d'intégration continue et d'Agile en même temps. Agile organise le développement en petits groupes de travail ou sprints. Lorsqu'elles sont appliquées dans le cadre de DevOps, ces pratiques combinées permettent de garantir la qualité des logiciels et la flexibilité des projets.

L'intégration continue vous oblige à intégrer le travail fréquemment, souvent plusieurs fois par jour. Vous vérifiez l'intégration par une construction automatisée qui détecte les erreurs d'intégration le plus tôt possible. La génération doit inclure des tests d'exécution dans le cadre de la vérification. L'extension des tests rapides aux tests d'exécution dans un environnement de test automatisé conduit naturellement à la distribution continue.

La pratique Agile (lien externe à IBM) est également itérative et s'adapte au changement, ce qui permet de faire évoluer les solutions au fil du temps. Dans le contexte de l'intégration continue, le développement logiciel Agile consiste à distribuer des itérations logicielles basées sur la manière dont vous hiérarchisez la valeur des fonctionnalités au fil de l'intégration continue.

DevOps

Dans le cadre de DevOps, l'intégration continue se situe au début du processus de développement logiciel, où vous vérifiez le code au moins une fois par jour pour éviter que les copies locales ne s'éloignent trop de la branche principale de génération du code. Vous vous évitez ainsi les conflits de fusion désastreux qui pourraient « casser » la génération et nécessiterait des heures, voire des jours, à l'équipe pour les résoudre.

L'intégration continue est un prérequis pour les étapes de test, de déploiement et de publication de la distribution continue. L'ensemble de l'équipe de développement saura, quelques minutes après l'enregistrement, si vous avez créé un code de mauvaise qualité, car le service d'intégration continue génère et teste automatiquement les modifications de code pour détecter toute erreur.

Outils d'intégration continue open source

Voici quelques-uns des outils d'intégration continue les plus utilisés :

  • Jenkins : Outil d'intégration continue open source très répandu, Jenkins permet aux développeurs de générer, intégrer et tester automatiquement le code dès qu'ils le valident dans le référentiel du code source, ce qui leur permet de détecter plus facilement les bogues et de déployer plus rapidement les logiciels. Le plug-in docker est disponible dans Jenkins.
  • Buildbot : Buildbot peut automatiser tous les aspects du cycle de développement logiciel. En tant que système de planification des tâches, il met en file d'attente et exécute les tâches, et fournit des rapports sur les résultats.
  • Go : La particularité de Go réside dans le concept de pipelines, qui facilite la modélisation des flux de travail de génération complexes.
  • IBM UrbanCode Build
  • Travis CI : L'une des solutions hébergées les plus anciennes et les plus fiables, et qui est également disponible dans une version sur site pour les entreprises.
  • GitLab CI : Partie intégrante du projet open source Rails, GitLab CI est un service hébergé gratuit qui permet une gestion détaillée des référentiels git avec des fonctionnalités telles que le contrôle d'accès, le suivi des problèmes, la révision du code, etc.

L'intégration continue à l'aide d'outils open source offre de nombreux avantages, notamment :

  • Des centaines de plug-ins qui peuvent prendre en charge votre projet
  • Prise en charge étendue des langages open source, tels que Python, Java et JavaScript
  • La gratuité : étudiants, startups et développeurs travaillent en parallèle un outil puissant et facile à gérer
  • Facilité de personnalisation qui permet aux développeurs de s'appuyer sur un outil d'intégration des données et de l'adapter aux besoins de chacun
  • Possibilité de modifier et de redistribuer les outils

Les outils d'intégration continue open source à prendre en considération pour votre flux de travail de développement logiciel comprennent Jenkins, Go, Buildbot et Travis CI, que vous pouvez découvrir à la section suivante.

Scénario d'utilisation

Le cas d'utilisation hypothétique suivant montre comment deux développeurs de logiciels peuvent utiliser l'intégration continue pour améliorer leur processus DevOps.

Les deux développeurs doivent communiquer entre eux pour savoir sur quelles fonctionnalités travailler et comment. Cette petite équipe a besoin de mises à jour régulières et doit être capable d'intégrer et de tester son code dans son ensemble. La planification de l'enregistrement du code et des tests occupe une large part du temps de développement. Un système automatique d'intégration continue est nécessaire.

Négocier le moment où ces combinaisons et ces tests auront lieu s'avère chronophage pour les développeurs.

ils doivent en effet se mettre d'accord sur les points suivants :

  1. Quand commencer à tester l'intégration du code
  2. Comment vérifier que l'intégration a réussi
  3. Comment communiquer les résultats à l'équipe

Les plateformes d'intégration continue ont des réponses par défaut à ces questions, et la plupart permettent la configuration et l'installation.

En général, les plateformes CI comme Jenkins commencent les tests d'intégration au moment de l'enregistrement. Lorsque le nouveau code est enregistré, le système CI exécute un ensemble de tests, lesquels peuvent inclure des tests unitaires et des tests de régression, puis détermine si le code a été intégré avec succès.

Ou, si vous utilisez un langage compilé, le test par défaut consistera à savoir si le code se compile correctement. Si ce n'est pas le cas, cela signifie que le nouveau code n'a pas été intégré. Pour les langages comme Python ou JavaScript, vous devez créer votre propre test d'intégration.

Dans tous les cas, la plupart des systèmes CI enregistrent les tentatives d'intégration, le taux de réussite et d'autres paramètres.

Serveurs

Un serveur d'intégration continue est un outil logiciel qui centralise toutes les opérations d'intégration continue et fournit une plateforme fiable et stable pour la réalisation de vos projets. Vous pouvez configurer et ajuster des serveurs d'intégration continue pour générer divers projets pour différentes plateformes. Un serveur d'intégration continue modélise et visualise facilement des flux de travail complexes (permettant la distribution continue) et fournit une interface intuitive pour la construction de pipelines de distribution continue. Avec un serveur d'intégration continue, vous pouvez :

  • Exécuter des générations, des tests et des éditions automatiques dans un seul et même endroit
  • Déployer n'importe quelle version à tout moment
  • Conserver la configuration en ordre
  • Prendre en charge des plug-ins pour améliorer la fonctionnalité
  • Contrôler le référentiel du projet
  • Extraire les modifications et effectuer les tâches que vous avez définies pour la validation
  • Envoyer aux membres du projet concernés des commentaires en retour avec les informations de la génération

L'importance des tests

Le test continu commence lorsque vous produisez une génération d'intégration continue et un package (également appelé entité installable ou entité packagée). Il s'arrête lorsque ce package est mise en production. Chaque étape de bout en bout implique une suite de tests.

Au minimum, lorsque vous n'avez qu'une seule étape de test, 30 % de l'intégration continue implique des tests. En réalité, les activités d'intégration continue sont constituées de 50 à 70 % de tests. Auparavant, les tests devaient être effectués manuellement. Vous pouvez désormais utiliser des tests automatisés, clé d'une intégration continue réussie.

Dans le cadre de l'automatisation des tests pour l'intégration continue, le développement à base de tests génère itérativement le code et les tests, un cas d'utilisation à la fois, afin de garantir la couverture des tests, d'améliorer la qualité du code et d'établir la base de la distribution continue. Les tests automatisés indiquent si le nouveau code a échoué à un ou plusieurs des tests développés dans tous les domaines fonctionnels de l'application. Une meilleure pratique requiert que les développeurs exécutent tous les tests ou un sous-ensemble de tests dans leurs environnements locaux, les développeurs validant ainsi le code source dans le contrôle de version uniquement si les nouvelles modifications du code ont réussi les tests. L'expérience montre qu'un test de régression efficace permet d'éviter les mauvaises surprises ultérieures.

Pipeline d'intégration continue

Un pipeline d'intégration continue automatise les étapes du pipeline d'un projet, telles que les générations, les tests et les déploiements, de façon reproductible et avec une intervention humaine minime. Un pipeline d'intégration continue automatisé est essentiel pour rationaliser le développement, les tests et le déploiement de vos applications en permettant des contrôles, des points de contrôle et en favorisant la rapidité.

Meilleures pratiques

Le processus d'intégration continue est un élément essentiel de DevOps, qui permet d'unifier les équipes de développement et des opérations dans un référentiel partagé pour coder, tester, déployer et prendre en charge le logiciel. Voici quelques pratiques recommandées en matière d'intégration continue qui peuvent vous aider à être performant :

  • Gérer un seul référentiel de code source : Utilisez la gestion du contrôle de source pour suivre et contrôler tous les fichiers permettant de générer un produit. Ce codebase consolidé facilite la distribution et la visibilité.
  • Automatiser la génération : Cela implique la compilation, la liaison et d'autres processus qui produisent les artefacts de la génération. L'autotest doit être également automatisé.
  • Utiliser des validations principales quotidiennes : Obligez les développeurs à valider leurs changements dans le flux de développement principal au moins une fois par jour. Chaque développeur doit vérifier que sa copie de travail est cohérente avec le flux de développement principal.
  • Tester dans un clone de l'environnement de production : Faites en sorte que l'environnement de test soit aussi similaire que possible à votre environnement de production final.
  • Automatiser le déploiement : Mettez en œuvre plusieurs environnements (développement, intégration, production) pour exécuter les générations et les tests.

Intégration continue et IBM Cloud®

L'approche d'IBM consiste à définir et à automatiser les projets, et à configurer la sécurité à l'aide de modèles. Lorsqu'une bibliothèque est modifiée, les applications dépendantes sont régénérées et connectées, liées ou rattachées. La compréhension des dépendances des applications vous aidera à moderniser vos applications.

À mesure que les organisations accélèrent cette transformation numérique, le besoin d'automatisation s'étend aux opérations métier et IT. Une évolution vers une plus grande automatisation doit commencer par de petits projets au succès quantifiable, que vous pourrez ensuite adapter et optimiser pour d'autres processus et dans d'autres parties de votre organisation.

En travaillant avec IBM, vous aurez accès à des fonctionnalités d'automatisation optimisées par l'IA, y compris des flux de travail préconfigurés, afin d'accélérer l'innovation en rendant chaque processus plus intelligent.

Pour aller plus loin :

— Commencez à gérer vos génération de logiciels, mise à l'échelle et configuration incluses, avec IBM® UrbanCode® Build.

— Lisez le rapport de HFS Research five « must-have’s » for automation success (lien externe à IBM).

Démarrez avec un compte IBM Cloud dès aujourd'hui.