L'intégration continue en tant que terme fait référence à deux idées distinctes.
Le premier est un flux de travail: au lieu que tout le monde dans une équipe travaille sur sa propre branche, puis après quelques semaines de programmation, essayez de fusionner leurs modifications dans la ligne principale, que les modifications sont intégrées (presque) en continu. Cela permet aux problèmes de faire surface tôt et évite les changements incompatibles. Cependant, cela nécessite que nous puissions facilement vérifier si un changement «fonctionne».
C'est là qu'intervient la deuxième idée, qui s'est avérée beaucoup plus populaire. Un serveur CI est un environnement propre où les modifications sont testées le plus rapidement possible. L'environnement propre est nécessaire pour que la construction soit reproductible. Si cela fonctionne une fois, cela devrait toujours fonctionner. Cela évite les problèmes «mais cela a fonctionné sur ma machine». En particulier, un serveur CI est précieux lorsque votre logiciel s'exécute sur différents systèmes ou dans différentes configurations et vous devez vous assurer que tout fonctionne.
L'absence d'une étape de construction n'est pas pertinente. Cependant, CI n'a de sens que si vous avez une suite de tests. Cette suite de tests doit être automatique et ne doit présenter aucun échec. Si les tests échouent, le développeur approprié devrait recevoir une notification afin qu'ils puissent résoudre le problème qu'ils ont introduit («casser la build», même quand il n'y a pas de build en tant que compilation).
Il s'avère qu'un tel serveur est utile pour bien plus que des tests. En fait, la plupart des logiciels CI sont vraiment nulles pour exécuter des tests dans diverses configurations, mais sont bons pour gérer toutes sortes de travaux. Par exemple, en plus des tests unitaires «continus», il pourrait y avoir un test complet comme construction nocturne. Le logiciel peut être testé avec plusieurs versions de Python, différentes versions de bibliothèque. Un site Web pourrait être testé pour les liens morts. Nous pouvons exécuter une analyse statique, des vérificateurs de style, des outils de couverture de test, etc. sur le code. La documentation peut être générée. Une fois toutes les suites de tests réussies, le processus de mise en package peut être lancé afin que vous soyez prêt à publier votre logiciel. Ceci est utile dans un environnement agile où vous voulez un produit déployable (et démontrable) à tout moment. Avec l'essor des applications web, il y a aussi l'idée d' un déploiement continu: Si tous les tests réussissent, nous pouvons automatiquement pousser les modifications à la production. Bien sûr, cela nécessite que vous ayez vraiment confiance en votre suite de tests (sinon, vous avez de plus gros problèmes).