Fermer

mai 28, 2019

Jeu d'outils CICD – Une comparaison rapide !!!


Outils du CICD – Comparaison

Le terme CICD est vaste et sa mise en œuvre est difficile en raison des options disponibles en tant que source ouverte ainsi que de produits sous licence. Nous essayons ici d’explorer les fonctionnalités des outils de CI et certaines des fonctionnalités à prendre en compte lors de la mise en œuvre afin que les outils puissent «s'intégrer» sans problème.

Il existe “n” nombre d’options pour répondre aux besoins de chaque projet. L'ensemble d'outils doit être terminé après avoir exploré diverses caractéristiques d'options pertinentes.

Définition du CICD

Le CICD se développe en tant qu'intégration continue et livraison continue / déploiement continu. Dans «le bon vieux temps» du développement, la pratique suivie consistait à intégrer les modifications de code au flux principal de manière non fréquente, ce qui rendait le déploiement ou la livraison un processus fastidieux. Cela a conduit à des problèmes divers dans des environnements plus élevés où nous avons besoin de revisiter le code et les étapes suivies pour les promouvoir. Les modifications ou le codage effectués pendant toute la période doivent être révisés, ce qui rend le projet complètement renversant.

Quelle différence alors que l'intégration continue peut rendre la vie plus facile ??? fusion répétée des modifications apportées au flux principal dans la journée par le développeur afin que le code puisse être examiné en le construisant.

Pourquoi CICD? !

Pour éviter de telles confusions, la meilleure solution est la CICD. CICD est une pratique de DevOps, si elle était suivie religieusement avec le bon ensemble d'outils, d'hypothèses, d'implémentations et de statistiques, faciliterait et améliorerait le cycle de vie d'un logiciel. À son tour, la vie est plus facile pour toutes les équipes qui travaillent avec elle (chaque membre de l'équipe !!! ?).

Le CICD insiste sur les modifications fréquentes et mineures du code dans le flux principal et, éventuellement, dans les environnements supérieurs, ce qui facilite les modifications. s'adapter plutôt qu'une évolution du jour au lendemain. CICD dispose d'un pipeline pour effectuer des builds et des tests automatisés. Les problèmes pouvaient être détectés presque immédiatement car seul le code propre / fonctionnel testé de manière approfondie serait promu dans des environnements plus élevés.

Les bugs peuvent être corrigés en un rien de temps par l'équipe de développement, car le code n'est pas «trop ancien» lorsqu'il est validé et construit. Seuls le dernier changement et la dernière construction doivent être revisités et corrigés. Cela économise beaucoup de temps et la qualité du code serait meilleure.

D'autres équipes travaillant en collaboration, comme une équipe de test, bénéficieraient des mêmes avantages que CICD. Au lieu d'exécuter manuellement les mêmes étapes plusieurs fois, elles peuvent être automatisées.

Le test des scripts et l'automatisation des étapes permettent de gagner beaucoup de temps et d'éviter les erreurs manuelles. Le bon ensemble d'outils doit être choisi et les équipes doivent avoir la même compréhension des exigences fonctionnelles et non fonctionnelles.

L'équipe d'assistance qui promeut le code peut également automatiser les processus tels que la préparation des fichiers d'archive, l'application des propriétés spécifiques à l'environnement, le déploiement dans environnement varié, surveiller les versions, avertir les équipes en cas d’échec, etc. au lieu d’effectuer manuellement les mêmes étapes en raison d’un problème ou d’un échec, ce serait fastidieux et une perte de temps.

Pour l’éviter, la mise en œuvre de CICD aide pour surmonter tous ces pièges avec juste le bon ensemble d'outils.

Critères à prendre en compte pour le choix de l'ensemble d'outils:

  1. Repository
  2. Outil d'intégration continue s'intégrant facilement au référentiel choisi et à l'EDI
  3. . ou sous licence, à son tour, des limitations telles que les limitations de licences individuelles, ainsi que simultanées ou de groupe
  4. Options intégrées dans l'outil CI pour permettre à la CICD
  5. Scri pting options offert par l'outil pour automatiser les processus.
  6. État du déploiement et moyens de communication concernant le déroulement du processus.

Certains des outils CICD qui seront explorés ou comparés ici sont les suivants: [19659003]

Certains sont des logiciels libres, d'autres donnent des versions d'évaluation suivies de l'achat de l'outil.

Tools Licence GUI Plate-forme Répartition de la charge OS Scripts supportés Référentiel Dernière version
Bamboo Licence d'essai de 30 jours Simple et facile à utiliser avec Java – Oracle JDK, Open JDK Aucun équilibrage de charge réel présent Windows, Linux, Solaris, MacOS / OSX Shell, Windows PowerShell, / bin / sh ou cmd.exe CVS, Git, Subversion, Perforce, Mercurial 6.8
Jenkins Open source L'interface utilisateur graphique est peu encombrée. la console est également disponible Multiplate-forme – Java SE Linux, MacOS, Windows, Fedora, OpenIndiana Hipster, Solaris, OmniOS, SmartOS Ant, Scripts Shell, Commandes Windows Batch AccuRev CVS La subversion Git Mercurial Perforce TD / OMS ClearCase et RTC 2.173
TeamCity Limité – 100 configurations de construction (gratuites) Une interface graphique assez simple à choisir et des options sont disponibles sur le panneau de gauche [19659035] Oracle Java 6-8. JDK 1.8. Open ainsi que Oracle JDK pris en charge Plusieurs agents peuvent être configurés sur le même ordinateur. Le processus recommandé consiste à exécuter un agent unique par machine (virtuelle) pour minimiser l'influence croisée des constructions et les rendre plus prévisibles Windows, Linux, Mac OS X et z / OS IBM, Solaris Ant 1.6 -1.9, IntelliJ IDEA Project coureur, MSBuild, NAnt, FXCop, NuGet, Powershell, Ligne de commande pour le script shell, Rake, Xcode CVS, Git, Mercurial, Subversion, SourceGear et Perforce sont entièrement pris en charge. . Prise en charge limitée de CVS, Vault et ClearCase 9.1
TravisCI Gratuit pour les projets open source. Utilisation tarifaire pour les projets privés Interface graphique accessible .travis.yml est une condition préalable obligatoire. Il est écrit en Python incapable d'ajuster les ressources et de recourir à des machines locales juste pour accélérer les builds entraîne une mauvaise répartition de la charge Windows, macOS, Xenial L'outil Matriciel Build Build de Git, BitBucket , Mercurial 1.7.x
GoCD Open Source Simple et propre Multiplate-forme GoCD et TLB – un combo traite l’équilibrage de la charge sur la base de '' Mutual Exclusion '&' Collective ' Exhaustion ' Linux, Windows, MacOS X Ant, NAnt, Rake, Ligne de commande Git, Mercurial, SubVersion, Perforce, Team Foundation Server 19.2.0
GitLabCI Open Source Accessible OpenSUSE, Debian, Raspbian Stretch La ​​distribution de la charge est ajoutée en tant que proposition de fonctionnalité Linux, MacOS, Windows Shell, Docker, Parallels, SSH, GitHub, BitBucket Cloud 11.10
CircleCI 4 conteneurs Linux sans limite de construction pour l'open source pro Jects. Sur macOS, CircleCI offre également 500 minutes de développement par mois à des projets open source. Pour d'autres, c'est un outil facturé Interface graphique accessible Python, Node.js, Ruby, Java, Go La ​​répartition de la charge est relativement bonne pour les utilisateurs payants et gratuits Ubuntu, macOS X. scripts Github, BitBucket 10.1
Codeship Gratuit pour 100 versions Interface Web simple à utiliser Jet est une condition préalable. La ​​mise en cache et le parallélisme régissent les versions ] Mac OS X, Linux, Windows SSH, FTP, SFTP, RSYNC, Script personnalisé, Heroku, AWS,

Bleu azur, Océan numérique, Git Push, etc.

GitHub, GitLab, Bitbucket 11.x

Livraison en continu / Déploiement en continu – analyse

Bien, un processus n'aura-t-il que de bonnes choses? Voyons cela plus en détail.

La livraison continue consiste à promouvoir le code de travail dans des environnements supérieurs – non-prod, afin que le code soit toujours prêt pour le déploiement en production. "Toujours prêt" semble fascinant, n'est-ce pas?

Le flux principal est efficace, performant, maintenable, stable, etc., et prêt pour le déploiement de code. L’équipe de développement est confiante en ce qui concerne le code et le modèle agile est mieux utilisé avec CD. Comme les émissions sont réglées à temps et dans des durées plus courtes, vous économisez du temps et de l'argent. Nous savons tous que le temps, c'est de l'argent dans n'importe quel secteur !!

Certains des obstacles qui pourraient être rencontrés lors de la lecture d'un CD pourraient être la courbe d'apprentissage initiale et le temps de formation, les coûts d'installation, l'achat de licences, la confiance tout en continuant à fournir des environnements plus élevés, s’habituer aux outils, à la continuité des activités lors de la migration vers les processus CICD automatisés, aux problèmes d’accès, etc. Tous doivent être pesés avant la mise en œuvre. Cela doit se faire progressivement et de manière transparente. Si les avantages sont pris en compte, ils ne sont que des obstacles, pas des inconvénients.

Le déploiement continu est le déploiement réel des modifications de la production de manière continue ou fréquente lorsque les modifications sont effectuées et testées dans des environnements inférieurs. La plupart des organisations qui suivent CICD exécutent les deux premiers processus mais hésitent à suivre le troisième pour diverses raisons propres aux entreprises et aux marchés.

Pourquoi une hésitation si tout va bien? Certaines applications ou entreprises ne souhaitent pas que le produit change fréquemment, ce qui fera perdre à leurs clients le «toucher» ou la continuité. Ironique! En revanche, certains d'entre eux, comme Facebook, souhaitent publier les modifications rapidement dès qu'elles sont testées et validées. Le déploiement de code le rend possible pour eux. L'environnement de production peut être sensible pour des domaines tels que la banque, la santé, etc. Il peut être amené à introduire progressivement des modifications dans l'application. Si nous implémentons la livraison de CD dans certaines applications d'interface utilisateur, si elle change tous les jours, cela ne laisserait pas une bonne impression au fournisseur de services. Les fonctionnalités doivent être introduites en fonction des besoins du client et de la tendance du marché ou du changement de règles gouvernementales, etc. Le client doit disposer de ce dont il a besoin, et non de la fonctionnalité développée au départ. Les fonctionnalités prévues dans les sprints initiaux peuvent être nécessaires pour aller plus tard, conformément à la tendance du marché et inversement. Une intervention peut donc être nécessaire pour planifier certaines activités ou applications. Un autre scénario est que si l'application / le produit évolue ou est naïf, le responsable du produit peut modifier les exigences en permanence. Cela affectera directement cette implémentation. Si cela change, alors l'aspect et la convivialité du produit seront modifiés en permanence avec des fonctionnalités supplémentaires, voire annulées. Cela pourrait créer une impression négative qui doit être correctement équilibrée en le contrôlant.

Code qualité – Le code qualité, ça compte vraiment !!

Oh oui! Nous connaissons maintenant peu d'outils disponibles sur le marché. Ce n'est pas la fin de l'histoire! ?

Une autre pratique importante doit être suivie pour tirer le meilleur parti de la CICD. C'est la qualité du code ! Si nous implémentons CICD et que toutes nos modifications sont générées sans échec, cela ne suffit pas. Le code doit avoir les meilleures normes pour que la maintenance ne devienne pas un défi. La complexité du code s'agrandit. Maintenant, la question est de savoir comment éviter que les odeurs de code parviennent au flux principal? La réponse bien connue est le test et la révision de code – analyse de code statique.

La dérivation à partir du flux principal est un processus courant dans CI. La qualité doit être examinée chaque fois que le code est inséré dans le flux principal. Il doit respecter les règles de révision ou les normes définies. Ce processus devrait être automatisé pour de meilleurs résultats. Il a obtenu une liste d’outils tels que: SonarQube, SonarLint, Coverity, Klocwork, Checkstyle, FindBugs, Lint, PMD, etc. Peu d’entre eux prennent en charge autant de langues que 14 – Coverity. Chaque outil a ses avantages et ses inconvénients. Le choix de l'outil dépend de ce qu'il faut tester, quand et où tester. Peu d'autres facteurs d'infrastructure tels que les versions, la prise en charge dans le cloud, l'intégration de référentiels, etc. Les tests / analyses ne doivent pas affecter les performances des applications.

L'analyse doit couvrir des domaines tels que la cohérence du code, les boucles imbriquées, les boucles non fermées, la vérification de la syntaxe, etc. la langue. La plupart des problèmes doivent être identifiés dans les environnements inférieurs afin d'éviter les défaillances précoces afin de gagner du temps et de l'argent. Des commentaires continus après des tests et des révisions automatisés améliorent le code, car les développeurs ont «suffisamment» de temps pour le corriger et ils connaissent les modifications fraîchement. Analyzer peut être configuré de manière à ce que les tests et les analyses soient exécutés lors d'une tentative d'enregistrement. Il faut procéder à l'enregistrement si l'examen et les tests ont un pourcentage de réussite égal ou supérieur à 80%.

Les commentaires sur les odeurs et les problèmes de code doivent être résolus avant que le code atteigne le flux principal, ce qui garantit une bonne qualité et que le code examiné atteint le grand public. Cela nous aidera à maintenir un bon code. Ce n'est plus un défi de maintenance de code cauchemardesque mais juste un code de qualité !!!

Quelques termes importants:

Voici quelques termes qui sont très importants pour comprendre CICD, à savoir Pipeline, mise en cache, parallélisme, travail, étape, tâche, etc. Ils doivent être discutés pour tirer le meilleur parti des fonctionnalités des outils de la CIDD.

Pipeline :

Nous connaissons tous le SDLC, qui comprend la collecte des exigences, la conception, le développement, test, déploiement et promotion du code en production. De même, nous avons également des étapes dans CICD. Une fois que le développement est terminé et que le code est validé dans le référentiel, CICD prend en charge et lance les processus tels que l'extraction de la modification ou du nouveau commit, la construction du code, la vérification du succès ou de l'échec de la construction, l'action suivante en fonction, notifiant les personnes concernées. en cas d’échec ou de déploiement dans les serveurs configurés et en cours d’exécution de scripts de test automatisés (s’ils sont configurés). Un déploiement ultérieur dans des environnements supérieurs peut également être configuré si nécessaire.

Les tests sont effectués conformément aux scénarios de test configurés dans l'outil CICD utilisé. En raison de plusieurs tests, si un problème survient, le code peut être corrigé et le même cycle de vie répété dans l'outil CI.

Ceci réduit le risque d'erreurs / problèmes fatals dans les environnements supérieurs. Il aide l’équipe de développement à corriger le code avec de multiples commits et à améliorer la qualité du code grâce à des tests fréquents de l’ensemble du code qui fonctionne.

L’outil CICD appelle cette série de processus un pipeline et elle est automatisée.

Parallélisme :

Comme son nom l'indique, nous devons suivre certaines étapes de manière parallèle. Cela permet de gagner du temps et d’améliorer le temps de réaction. De longues heures d'attente pour obtenir des retours sur les tests séquentiels d'un logiciel ou d'un code sont fastidieux et la productivité serait sérieusement affectée. Au lieu de cela, diviser la séquence en fragments plus petits et gérables et les exécuter en parallèle permettra de gagner du temps et d’améliorer le temps de retour. Ceci est réalisé dans les outils CICD. Exemple CircleCI etc.

Mise en cache :

La mise en cache implique la fonctionnalité de chargement du cache de l'outil de CI pour des contenus réutilisables tels que des bibliothèques et des fichiers externes externes provenant d'Internet. Peu d'outils de CI offrent une fonctionnalité de mise en cache. Cela permet au pipeline de terminer le processus plus rapidement que les anciennes méthodes de récupération de données communes pour chaque génération. Cela réduit le temps de construction et améliore le temps de retour. Le cache peut être chargé et effacé en suivant des étapes simples et peut être effectué selon les besoins du projet. Le cache ne remplace pas les artefacts spécifiques à l'environnement tels que le fichier de propriétés. Exemple: GitLab, Codefresh, etc. sont mis en cache.

Tâche, tâche et étape:

Les tâches sont le composant le plus granulaire de CICD. Lors de la planification du pipeline pour un code / logiciel, plusieurs tâches doivent être configurées pour exécuter diverses étapes. Pour des étapes telles que la réalisation de divers tests, plusieurs tâches peuvent être configurées ou effectuées. Les tâches connexes sont combinées pour créer un travail. Pipeline aura plusieurs tâches à exécuter et les tâches auront plusieurs tâches.

L'étape implique différents environnements dans lesquels le code ou le logiciel sera promu ou déployé. Il pourrait y avoir plusieurs environnements pour chaque logiciel. L'outil CICD contactera les serveurs respectifs, s'ils sont configurés, et le déploiement sera effectué une fois qu'ils auront été construits et testés avec succès. Avec les autorisations et les configurations requises, le code serait promu à des niveaux supérieurs. Chaque étape aura ses propriétés environnementales configurées.

Enfin…

Pour tirer le meilleur parti du CICD, nous devons choisir le bon ensemble d’outils en fonction de nos besoins. Activer 2.0 – L'outil CAR est utilisé pour comparer les outils et le résultat est ici

Critères de comparaison Jenkins Bamboo TeamCity TravisCI GoCD GitLabCI . 19659143] Codeship
Licence Open source Licence d'essai de 30 jours Limité – 100 configurations construites (gratuit) Gratuit pour les projets open source. Utilisation des honoraires de base pour les projets privés Open source Open source 4 conteneurs Linux sans limite de compilation d’open source Gratuit pour 100 versions
GUI Les interfaces graphiques sont peu encombrées. la console est également disponible Simple et facile à utiliser avec Une interface graphique modérément simple à choisir et une option disponible sur le panneau de gauche Interface graphique accessible Simple et propre Accessible Interface graphique accessible ] Interface Web – simple à utiliser
Plateforme Multiplateforme – Java SE Java – JDK Oracle, Open JDK Oracle Java 6-8. JDK 1.8. Open ainsi que le JDK Oracle pris en charge .travis.yml est une condition préalable obligatoire. C'est écrit en Python multiplate-forme OpenSUSE, Debian, Raspbian Stretch Python, Node.js, Ruby, Java, Go Le jet est une condition préalable
La répartition de charge
N ° Aucun équilibrage de charge réel n'est présent Plusieurs agents peuvent être configurés sur une même machine. Le processus recommandé consiste à exécuter un agent unique par machine (virtuelle) afin de minimiser l'influence croisée des constructions et de rendre plus prévisible l'impossibilité d'ajuster les ressources, et de recourir à des machines locales uniquement pour accélérer les générations, d'où une mauvaise répartition de la charge GoCD et TLB – le combo traite l'équilibrage de charge basé sur les expressions "Exclusion mutuelle" et "Épuisement collectif" La répartition de la charge est ajoutée en tant que proposition de fonction La répartition de la charge est relativement bonne pour les utilisateurs payants et libres La mise en cache et le parallélisme régissent les versions
OS Linux, MacOS, Windows, Fedora, OpenIndiana Hipster, Solaris, OmniOS, SmartOS Windows, Linux, Solaris, MacOS / OSX Windows, Linux, Mac OS X et IBM z / OS , Solaris Windows, macOS, Xenial Linux, Windows, MacOS X Linux, MacOS, Windows Ubuntu, macOS X Mac OS X, Linux, Windows
Prise en charge des scripts Ant, Scripts Shell, Commandes Windows Batch [1 9659146] Shell, Windows PowerShell, / bin / sh ou cmd.exe Ant 1.6 -1.9, porteur du projet IntelliJ IDEA, MSBuild, NANT, FXCop, NuGet, Powershell, Ligne de commande du script shell, Rake, Xcode Dans Construit Construire outil de matrice Ant, NAnt, Rake, Ligne de commande Shell, Docker, Parallels, SSH Scripts de shell SSH, FTP, SFTP, RSYNC, Script personnalisé, Heroku, AWS, [19659153] Intégration de référentiels AccuRev, CVS, Subversion, Git, Mercurial, PerforceTD / OMS, ClearCase et RTC CVS, Git, Subversion, Perforce, Mercurial CVS, Git, Mercurial, Subversion et Perforce Are entièrement pris en charge. Prise en charge limitée de CVS, Vault et ClearCase Git, BitBucket, Mercurial Git, Mercurial, SousVersion, Perforce, Team Foundation Server GitHub, BitBucket Cloud Github, BitBucket. Bitbucket
Score total: 17 17 17 12 16 15 15 14

] Conclusion de l'analyse de la CAR:

En comparant avec quelques outils, nous sélectionnons Jenkins, Bamboo ou Teamcity comme outils car ils offrent les avantages suivants:
1. Jenkins / Bamboo / Teamcity s'intègre facilement à des outils basés sur le système d'exploitation pris en charge, le référentiel pris en charge et le système d'exploitation.
2. De nombreux types de scripts de construction sont pris en charge.
3. Différentes plates-formes doivent être prises en charge

Une fois implémentées, les bonnes pratiques rendront le cycle de vie du projet plus facile et plus convivial, avec de nombreuses améliorations en termes de qualité du code livrable. La fin de la journée compte pour la qualité des produits livrables !!!




Source link