web-dev-qa-db-fra.com

Comment peut-on utiliser CI pour les langues interprétées?

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?

23
Lord Loh.

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).

32
amon

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.

24
Iker

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:

  • Exécuter des tests automatiques. (Python a une richesse de bibliothèques de test automatisées et PHP= a au moins certains. Je ne peux pas parler à Matlab.)
  • Grouper le logiciel de distribution. En automatisant ce processus, vous vous assurez que cela se fait de manière exacte, cohérente et répétable à chaque fois. Aucune étape ne sera oubliée; Générer un tel ensemble de distribution prend au plus un clic. (Ensende de votre Python app sous la forme d'une roue est une bonne idée!)
  • Marquage Milestone s'engage. Chaque fois que vous construisez un paquet de production, vous voulez probablement l'étiqueter.
  • Numéros de version d'incrémentation automatique. Habituellement, ce serait simplement le numéro "Construire" et non les parties les plus significatives, mais il peut être agréable d'identifier de manière unique une construction particulière, vous savez donc ce qui est déployé là où.

Aller un peu plus loin à la ligne de frontière d'une "intégration continue" dans un sens strict, vous pouvez aussi les faire:

  • Demandez à un processus automatisé de configuration d'un système d'exploitation et d'installer vos dépendances.
  • Déploiement automatiquement des copies du logiciel (principalement utiles pour les applications Web ou le logiciel distribué par un gestionnaire de packages). Certaines équipes utilisent réellement cela pour se déployer sur la production (livraison continue), mais même si vous ne le faites pas, vous pouvez toujours tirer parti de cela pour le déploiement de copies de non-production supplémentaires du code. Pour certains projets où je travaille, nous avons une copie pour les développeurs pour tester leur code avant de la mettre à la disposition de la QA, une copie à tester et une copie plus "stable" à des fins de démontrage.

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

  • Processus cohérent (vous n'aurez pas Stan et Sally faire des choses différentes manières.)
  • Connaissance des processus enregistrés dans Code (Tout le monde qui peut lire les scripts peut apprendre les étapes à suivre pour le déploiement, au lieu de Sally étant le seul qui le fait ou sait comment.)
  • Duplication plus simple des processus (simple à déployer plusieurs copies du site Web: vous offrez simplement une nouvelle configuration!)
  • Des tests plus approfondis (Bob n'utilisé que sa page, mais ses modifications ont cassé la page de Sally. Sally oublié de commettre un fichier. Stan a ajouté une nouvelle dépendance qui doit être installée à côté de l'application, mais ne l'a pas réalisé car il est installé automatiquement par l'IDE . J'ai tous vu tous ceux-ci sous une forme ou une autre.)

Et probablement quelques autres avantages qui ne viennent même pas à l'esprit.

7
jpmc26

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.

1
Mike