Je n'ai jamais utilisé de système d'intégration continue (CI) avant. Je code principalement dans Matlab, Python ou PHP. Aucun de ceux-ci n'a une étape de construction et je ne vois pas comment un CI pourrait être utilisé pour mon travail. Un ami sur un grand projet dans une grande Firm m'a dit que la langue n'a pas d'importance.
Je ne vois pas comment CI serait utile pour moi si je n'ai pas une étape de construction. Je peux penser à CI comme un environnement de test qui exécuterait des tests d'unité. Est-ce que je manque quelque chose?
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 de tout le monde dans une équipe travaillant sur sa propre branche, puis après quelques semaines de programmation, essayez de fusionner leurs modifications dans la ligne principale, que des modifications sont intégrées de manière continue (presque). Cela permet aux problèmes de surface précoce et évite les changements incompatibles. Cependant, cela nécessite que nous puissions facilement vérifier si un changement "fonctionne".
C'est là que la deuxième idée entretient, ce qui s'est avéré 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 "mais cela a fonctionné sur ma machine" problèmes. 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 être sûr que tout fonctionne.
L'absence d'une étape de construction est hors de propos. Cependant, CI n'a de sens que si vous avez une suite de test. Cette suite d'essai doit être automatique et ne doit pas avoir d'échecs. Si les tests échouent, le développeur approprié doit avoir une notification afin de pouvoir résoudre le problème qu'ils introduisent ("briser la construction", même lorsqu'il n'y a pas de construction comme compilation).
Il s'avère qu'un tel serveur est précieux pour plus que des tests. En fait, la plupart des logiciels CI sont vraiment de merde pour passer des tests dans diverses configurations, mais bien à la gestion de toutes sortes d'emplois. Par exemple. En plus des tests d'unité "continue", il pourrait y avoir un test complet comme une construction nocturne. Le logiciel peut être testé avec plusieurs Python versions, différentes versions de bibliothèque. Un site Web pourrait être testé pour des liaisons morts. Nous pouvons exécuter des analyses statiques, des dames de style, des outils de couverture de test, etc. sur la Code. La documentation peut être générée. Lorsque toutes les suites de test passent, le processus d'emballage pourrait être lancé afin que vous soyez prêt à libérer votre logiciel. Ceci est utile dans un paramètre agile où vous voulez un produit déployable (et démoable) à tout moment. . Avec la montée des applications Web, il y a aussi l'idée de déploiement contin: Si tous les tests passent, nous pouvons appuyer automatiquement les modifications à la production. Bien sûr, cela nécessite que vous soyez vraiment confiant dans votre test Suite (sinon, vous avez de plus gros problèmes).
True, vous n'avez pas de besoin particulier d'un système CI pour effectuer des constructions et vérifier que ces constructions sont correctes, mais cela ne fait qu'une partie de ce que CI est à peu près.
Le but de CI est de détecter des erreurs dès que possible, car de manière générale, la précédente d'une erreur est capturée le moins cher qu'il est de corriger. À cette fin, dans le cas où une étape de construction n'est pas nécessaire, un système CI peut toujours automatiser l'utilisation des outils d'analyse de code, le déploiement de l'environnement de test, l'unité/l'intégration/régression/autres tests que vous pouvez automatiser et toute autre étape. Vous pouvez effectuer automatiquement pour vérifier les erreurs.
L'intégration continue effectue plus d'une compilation du code. Si c'est tout ce qu'il a fait, alors nous n'aurions pas besoin de presque tellement d'outils pour cela!
Quelques autres tâches que je peux penser de manière excessive qu'un pipeline d'intégration continue fonctionne souvent:
Aller un peu plus loin à la ligne de frontière d'une "intégration continue" dans un sens strict, vous pouvez aussi les faire:
Le point est simplement ceci: il y a des tâches que vous devez effectuer périodiquement dans le processus de développement de logiciels en plus d'écrire le code. En automatisant ces tâches et en les demandant à un serveur, vous obtenez
Et probablement quelques autres avantages qui ne viennent même pas à l'esprit.
Vous n'avez peut-être pas besoin de compiler les solutions, mais CI peut toujours vous aider en modifiant les chemins de fichiers/dossiers de configuration, etc. Si vous êtes dans une équipe, promouvoir les modifications apportées au statut de produit et à les déployer.
Disons que vous déploiiez votre Python code à 5 serveurs QA différents et avez besoin qu'il pointant sur différentes bases de données QA, puis une fois l'exécution de test automatisée (déclenchée par CI), favorisant la construction à la production et le déploier Là avec les modifications de configuration appropriées pour chaque serveur de production.