DevOps est devenu la solution standard pour corriger les processus de développement logiciel lents, déconnectés ou interrompus. Le problème est que si vous êtes nouveau dans DevOps et que vous ne savez pas par où commencer, vous risquez de ne pas comprendre ces techniques. Cet article vous expliquera la définition d'un pipeline DevOps et vous expliquera comment le créer en cinq étapes. Bien que ce didacticiel ne soit pas complet, il devrait vous donner une base pour vous aider à démarrer et élargir vos connaissances à l'avenir. Mais commençons par l'histoire.
Mon parcours DevOps
J'ai travaillé dans l'équipe cloud du groupe Citi développant une application Web IaaS (Infrastructure-as-a-Service) pour gérer l'infrastructure cloud de Citi, mais je me suis toujours demandé comment rendre le processus de développement plus efficace et apporter un changement culturel positif à l'équipe de développement. J'ai trouvé la réponse dans un livre recommandé par Greg Lavender, CTO de Citi pour l'architecture et l'infrastructure cloud. Le livre s'intitulait The Phoenix Project et explique les principes du DevOps tout en lisant comme un roman.
Le tableau au dos du livre montre la fréquence à laquelle différentes entreprises déploient leurs systèmes dans un environnement de lancement:
Amazon: 23 000 par jour
Google: 5 500 par jour
Netflix: 500 par jour
Facebook: une fois par jour
Twitter: 3 fois par semaine
Entreprise typique: une fois tous les 9 mois
Comment les fréquences Amazon, Google et Netflix sont-elles même possibles? En effet, ces entreprises ont compris comment créer un pipeline DevOps presque parfait.
Nous en étions loin jusqu'à ce que nous implémentions DevOps chez Citi. Mon équipe avait des environnements différents à l'époque, mais le déploiement sur le serveur de développement était complètement manuel. Tous les développeurs n'avaient accès qu'à un seul serveur de développement basé sur IBM WebSphere Application Server Community Edition. Le problème était que le serveur s'arrêtait chaque fois que plusieurs utilisateurs essayaient de se déployer en même temps, de sorte que les développeurs devaient se communiquer leurs intentions, ce qui était assez douloureux. En outre, il y avait des problèmes avec la couverture du code de test de bas niveau, les processus de déploiement manuels fastidieux et l'incapacité de suivre le déploiement du code associé à une tâche ou à une user story spécifique.
J'ai réalisé que j'avais besoin de faire quelque chose et j'ai trouvé un collègue aux vues similaires. Nous avons décidé de collaborer sur le pipeline DevOps initial - il a mis en place une machine virtuelle et un serveur d'applications Tomcat pendant que je travaillais sur Jenkins, intégré Atlassian Jira et BitBucket, et travaillé sur la couverture du code de test. Ce projet parallèle a été très réussi: nous avons presque complètement automatisé de nombreux processus, atteint presque 100% de disponibilité de notre serveur de développement, fourni un suivi et amélioré la couverture du code de test, et également ajouté la possibilité de lier les branches dans Git avec des problèmes dans Jira ou des déploiements. La plupart des outils que nous avons utilisés pour construire notre pipeline DevOps étaient open source.
Maintenant, je comprends à quel point notre pipeline DevOps était simple: nous n'avons pas utilisé d'extensions comme les fichiers Jenkins ou Ansible. Cependant, ce pipeline simple a bien fonctionné, probablement en raison du principe de Pareto (également connu sous le nom de règle 80/20).
Une introduction rapide à DevOps et au pipeline CI / CD
Si vous demandez à plusieurs personnes: «Qu'est-ce que DevOps?», Vous obtiendrez probablement plusieurs réponses différentes. DevOps, comme Agile, a évolué pour englober de nombreuses disciplines différentes, mais la plupart des gens seront d'accord sur quelques points: DevOps est une pratique de développement logiciel ou cycle de vie du développement logiciel (SDLC) qui se concentre sur le changement de la culture dans laquelle les développeurs et les non-développeurs existent dans un environnement dans lequel: des
opérations automatisées qui étaient auparavant effectuées manuellement;
Chacun fait ce qu'il sait le mieux;
Le nombre d'implémentations pendant une certaine période de temps augmente; Le débit augmente;
La flexibilité de développement est augmentée.
Bien que disposer des bons outils logiciels ne soit pas la seule chose dont vous avez besoin pour créer un environnement DevOps, certains outils sont nécessaires. L'outil clé est l'intégration continue et le déploiement continu (CI / CD). Dans ce pipeline, les environnements comportent différentes étapes (par exemple, DEV, INT, TST, QA, UAT, STG, PROD), de nombreuses opérations sont automatisées et les développeurs peuvent écrire du code de haute qualité, obtenir une flexibilité de développement et une fréquence de déploiement élevée.
Cet article décrit une approche en cinq étapes pour créer un pipeline DevOps similaire à celui illustré dans le diagramme suivant à l'aide d'outils open source.
Étape 1: Méthodes CI / CD
La première chose dont vous avez besoin est un outil CI / CD. Jenkins, un outil open source basé sur Java publié sous la licence MIT, est l'outil qui a popularisé la direction DevOps et est devenu le standard de facto.
Alors qu'est-ce que Jenkins? Considérez-le comme une sorte de télécommande universelle magique qui peut parler et organiser divers services et outils. Un outil CI / CD comme Jenkins est inutile en soi, mais il devient plus puissant en se connectant à divers outils et services.
Jenkins n'est qu'un des nombreux outils CI / CD open source que vous pouvez utiliser pour créer votre pipeline DevOps.
Jenkins: Creative Commons et MIT
Travis CI: MIT
CruiseControl: BSD
Buildbot: GPL
Apache Gump: Apache 2.0
Cabie: GNU
Voici à quoi ressemblent les processus DevOps avec un outil CI / CD:
Vous avez un outil CI / CD en cours d'exécution sur votre hôte local, mais vous ne pouvez pas faire grand-chose à ce stade. Passons à la prochaine étape du voyage DevOps.
Étape 2: Gérer les systèmes de contrôle de source
La meilleure façon (et sans doute la plus simple) de tester que votre outil CI / CD peut faire la magie est de l'intégrer à un outil de contrôle de code source (SCM). Pourquoi avez-vous besoin d'un contrôle de code source? Disons que vous développez une application. Chaque fois que vous créez une application, vous programmez, peu importe si vous utilisez Java, Python, C ++, Go, Ruby, JavaScript ou l'un des millions de langages de programmation. Le code que vous écrivez est appelé code source. Au début, surtout lorsque vous travaillez seul, vous pouvez probablement tout mettre dans un répertoire local. Mais à mesure que le projet s'agrandit et que vous invitez d'autres personnes à collaborer, vous avez besoin d'un moyen d'éviter les conflits tout en partageant efficacement les modifications. Vous avez également besoin d'un moyen de restaurer les versions précédentes,car la création de sauvegardes et leur copie / collage est déjà obsolète. Vous (et vos coéquipiers) avez besoin de quelque chose de mieux.
C'est là que le contrôle de la source devient pratiquement une nécessité. Cet outil stocke votre code dans des référentiels, assure le suivi des versions et coordonne le travail des participants au projet.
Bien qu'il existe de nombreux outils de contrôle de source, Git est la norme et à juste titre. Je recommande fortement d'utiliser Git, bien qu'il existe d'autres options open source si vous le souhaitez.
Git: GPLv2 et LGPL v2.1
Subversion: Apache 2.0
Concurrent Versions System (CVS): GNU
Vesta: LGPL
Mercurial: GNU GPL v2 +
Voici à quoi ressemble un pipeline DevOps avec des contrôles de source ajoutés.
L'outil CI / CD peut automatiser les processus de vérification, de récupération du code source et de collaboration entre les membres. Pas mal? Mais comment en faire une application fonctionnelle pour que des milliards de personnes puissent l'utiliser et l'apprécier?
Étape 3: créer un outil d'automatisation de construction
Bien! Vous pouvez vérifier le code et apporter des modifications au système de contrôle de code source, ainsi qu'inviter vos amis à collaborer au développement. Mais vous n'avez pas encore créé l'application. Pour créer une application Web, elle doit être compilée et empaquetée dans un format de lot déployable, ou exécutée en tant que fichier exécutable. (Notez qu'un langage de programmation interprété comme JavaScript ou PHP n'a pas besoin d'être compilé.)
Utilisez un outil d'automatisation de construction. Quel que soit l'outil d'automatisation de construction que vous choisissez d'utiliser, ils ont tous le même objectif: créer du code source dans le format de votre choix et automatiser la tâche de nettoyage, de compilation, de test et de déploiement dans un environnement spécifique. Les outils de construction varient en fonction de votre langage de programmation, mais voici quelques options open source courantes.
Nom | Licence | Langage de programmation |
---|---|---|
Maven | Apache 2.0 | Java |
Fourmi | Apache 2.0 | Java |
Gradle | Apache 2.0 | Java |
Bazel | Apache 2.0 | Java |
Faire | GNOU | N / a |
Grognement | MIT | JavaScript |
Gorgée | MIT | JavaScript |
Construire | Apache | Rubis |
Râteau | MIT | Rubis |
AAP | GNOU | Python |
SCons | MIT | Python |
BitBake | GPLv2 | Python |
gâteau | MIT | C # |
ASDF | Expatrié (MIT) | ZÉZAYER |
Cabale | BSD | Haskell |
Génial! Vous pouvez mettre les fichiers de configuration de l'outil d'automatisation de construction dans un système de contrôle de source et laisser votre outil CI / CD rassembler tout.
C'est bon, n'est-ce pas? Mais où déployer votre application?
Étape 4: Serveur pour les applications Web
Jusqu'à présent, vous disposez d'un fichier compressé qui peut être exécutable ou installable. Pour qu'une application soit vraiment utile, elle doit fournir une sorte de service ou d'interface, mais vous avez besoin d'un conteneur pour héberger votre application.
Le serveur d'applications Web est un tel conteneur. Le serveur fournit un environnement dans lequel la logique du package déployé peut être définie. Le serveur fournit également une interface et propose des services Web en ouvrant des sockets vers le monde extérieur. Vous avez besoin d'un serveur HTTP ainsi que d'un environnement (comme une machine virtuelle) pour l'installer. Pour l'instant, supposons que vous en appreniez plus à ce sujet (même si je parlerai des conteneurs ci-dessous).
Il existe plusieurs serveurs d'applications Web open source.
Nom | Licence | Langage de programmation |
---|---|---|
Matou | Apache 2.0 | Java |
Jetée | Apache 2.0 | Java |
WildFly | GNU petit public | Java |
VerrePoisson | CDDL et GNU moins publics | Java |
Django | BSD à 3 clauses | Python |
Tornade | Apache 2.0 | Python |
Gunicorn | MIT | Python |
Python | MIT | Python |
Rails | MIT | Rubis |
Node.js | MIT | Javascript |
Votre pipeline DevOps est presque prêt à être utilisé. Bon travail!
Bien que vous puissiez vous arrêter là et vous intégrer, la qualité du code est une chose importante pour un développeur d'applications.
Étape 5: couverture des tests de code
La mise en œuvre de tests peut être une autre exigence lourde, mais les développeurs doivent détecter rapidement tout bogue dans l'application et améliorer la qualité du code pour s'assurer que les utilisateurs finaux sont satisfaits. Heureusement, il existe de nombreux outils open source pour tester votre code et faire des recommandations pour améliorer sa qualité. Mieux encore, la plupart des outils CI / CD peuvent se connecter à ces outils et automatiser le processus.
Le test de code se compose de deux parties: des frameworks de test de code qui vous aident à écrire et exécuter des tests, et des outils de proposition qui aident à améliorer la qualité de votre code.
Systèmes de test de code
Nom | Licence | Langage de programmation |
---|---|---|
JUnit | Licence publique Eclipse | Java |
EasyMock | Apache | Java |
Mockito | MIT | Java |
PowerMock | Apache 2.0 | Java |
Pytest | MIT | Python |
Hypothèse | Mozilla | Python |
Tox | MIT | Python |
Systèmes de recommandation d'amélioration du code
Nom | Licence | Langage de programmation |
---|---|---|
Cobertura | GNOU | Java |
CodeCover | Eclipse publique (EPL) | Java |
Coverage.py | Apache 2.0 | Python |
Emma | Licence publique commune | Java |
JaCoCo | Licence publique Eclipse | Java |
Hypothèse | Mozilla | Python |
Tox | MIT | Python |
Jasmin | MIT | JavaScript |
Karma | MIT | JavaScript |
Moka | MIT | JavaScript |
Plaisanter | MIT | JavaScript |
Notez que la plupart des outils et frameworks mentionnés ci-dessus sont écrits pour Java, Python et JavaScript, puisque C ++ et C # sont des langages de programmation propriétaires (bien que GCC soit open source).
Maintenant que vous avez implémenté des outils de couverture de test, votre pipeline DevOps doit ressembler au diagramme présenté au début de ce didacticiel.
Etapes supplémentaires
Conteneurs
Comme je l'ai dit, vous pouvez héberger votre serveur dans une machine virtuelle ou un serveur, mais les conteneurs sont une solution populaire.
Que sont les conteneurs? La brève explication est qu'une machine virtuelle a besoin d'une énorme quantité de mémoire du système d'exploitation qui dépasse la taille de l'application, tandis que le conteneur n'a besoin que de quelques bibliothèques et configurations pour exécuter l'application. Évidemment, il existe encore des utilisations importantes pour une machine virtuelle, mais un conteneur est une solution légère pour héberger une application, y compris un serveur d'applications.
Bien que d'autres options de conteneur existent, les plus populaires sont Docker et Kubernetes.
Docker: Apache 2.0
Kubernetes: middleware Apache 2.0
Automation
Notre pipeline DevOps est principalement axé sur la co-création et le déploiement d'applications, mais il y a beaucoup d'autres choses qui peuvent être faites à l'aide des outils DevOps. L'un d'eux est l'utilisation d'outils d'infrastructure en tant que code (IaC), également connus sous le nom d'outils middleware. Ces outils aident à automatiser l'installation, la gestion et d'autres tâches pour le middleware. Par exemple, un outil d'automatisation peut récupérer des applications telles que le serveur d'applications Web, la base de données et l'outil de surveillance avec les configurations appropriées et les déployer sur le serveur d'applications.
Voici quelques outils middleware open source:
Ansible: GNU Public
SaltStack: Apache 2.0
Chef: Apache 2.0
Puppet: Apache ou GPL
Apprenez en détail comment obtenir un métier recherché à partir de zéro ou passer au niveau supérieur en compétences et en salaire en suivant les cours en ligne payés de SkillFactory:
- Cours DevOps (12 mois)
plus de cours
- Machine Learning (12 )
- Data Science (12 )
- (9 )
- «Python -» (9 )
Utile
- 450 cours gratuits de l'Ivy League
- Tendances de la science des données 2020
- La science des données est morte. Vive la science des affaires
- Scénario de données sur les stéroïdes: introduction de l'intelligence décisionnelle
- Projet Data Science le plus réussi et le plus controversé: Cambridge Analytica