Guide du débutant : création d'un pipeline DevOps

Si vous êtes nouveau dans DevOps, jetez un œil à ce guide en cinq étapes pour créer votre premier pipeline.

Guide du débutant : création d'un pipeline DevOps

DevOps est devenu la solution standard pour corriger les processus de développement logiciel lents, décousus ou interrompus. Le problème est que si vous êtes nouveau dans DevOps et que vous ne savez pas par où commencer, vous ne comprenez peut-être pas ces techniques. Cet article abordera la définition d'un pipeline DevOps et fournira également des instructions en cinq étapes pour en créer un. Bien que ce didacticiel ne soit pas exhaustif, il devrait vous donner une base pour commencer votre voyage et élargir vos connaissances à l'avenir. Mais commençons par l'histoire.

Mon parcours DevOps

J'ai auparavant travaillé dans l'équipe cloud de Citi Group en développant une application Web Infrastructure-as-a-Service (IaaS) pour gérer l'infrastructure cloud de Citi, mais j'ai toujours été intéressé par la façon de rendre le processus de développement plus efficace et d'apporter un changement culturel positif au équipe de développement. J'ai trouvé la réponse dans un livre recommandé par Greg Lavender, CTO de Cloud Architecture and Infrastructure chez Citi. Le livre s'intitulait The Phoenix Project (Le projet Phénix), et il explique les principes du DevOps, mais il se lit comme un roman.

Le tableau à la fin du livre montre la fréquence à laquelle différentes entreprises déploient leurs systèmes dans un environnement de version :

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 type : Une fois tous les 9 mois

Comment les fréquences Amazon, Google et Netflix sont-elles 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. À l’époque, mon équipe disposait d’environnements différents, mais le déploiement sur le serveur de développement était entièrement manuel. Tous les développeurs avaient accès à 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 tentaient de déployer en même temps, les développeurs devaient donc se communiquer leurs intentions, ce qui était assez pénible. De plus, il y avait des problèmes liés à la couverture du code de test de bas niveau, aux processus de déploiement manuel 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é qu'il fallait faire quelque chose et j'ai trouvé un collègue partageant les mêmes idées. Nous avons décidé de collaborer à la création du 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 connu un grand succès : nous avons presque entièrement automatisé de nombreux processus, atteint une disponibilité de près de 100 % sur notre serveur de développement, assuré le suivi et amélioré la couverture des tests du code, et ajouté la possibilité de lier les branches Git aux problèmes ou aux déploiements Jira. La plupart des outils que nous avons utilisés pour créer notre pipeline DevOps étaient open source.

Je comprends maintenant à quel point notre pipeline DevOps était simple : nous n'avons pas utilisé d'extensions comme les fichiers Jenkins ou Ansible. Cependant, ce simple pipeline a bien fonctionné, peut-être grâce au principe de Pareto (également connu sous le nom de règle des 80/20).

Une brève introduction à 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 couvrir 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 un cycle de vie de développement logiciel (SDLC) dont le principe central est de changer la culture dans laquelle les développeurs et les non-développeurs. les développeurs existent dans un environnement dans lequel :

Les opérations qui étaient auparavant effectuées manuellement ont été automatisées ;
Chacun fait ce qu'il fait de mieux ;
Le nombre de mises en œuvre sur une certaine période de temps augmente ; Le débit augmente ;
Flexibilité de développement accrue.

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 essentiels. Un 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é, atteindre une agilité de développement et des taux de déploiement élevés.

Cet article décrit une approche en cinq étapes pour créer un pipeline DevOps comme celui présenté 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 et sous licence MIT, est l'outil qui a popularisé 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 communiquer et organiser divers services et outils. À lui seul, un outil CI/CD comme Jenkins est inutile, mais il devient plus puissant à mesure qu'il se connecte à différents outils et services.

Jenkins n'est que l'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
Robot de construction : GPL
Apache Gump : Apache 2.0
Cabie : GNU

Voici à quoi ressemblent les processus DevOps avec un outil CI/CD :

Guide du débutant : création d'un pipeline DevOps

Vous disposez d'un outil CI/CD exécuté sur votre hôte local, mais vous ne pouvez pas faire grand-chose pour le moment. Passons à la prochaine étape du parcours DevOps.

Étape 2 : Gérer les systèmes de contrôle de code source

Le meilleur moyen (et peut-être le plus simple) de vérifier que votre outil CI/CD peut faire sa 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, et peu importe que vous utilisiez 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, il est probablement possible de tout mettre dans un répertoire local. Mais à mesure que le projet prend de l'ampleur 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 créer des sauvegardes et y copier/coller devient obsolète. Vous (et vos coéquipiers) avez besoin de quelque chose de mieux.

C’est là que le contrôle du code source devient presque 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 code 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 préférez.

Git : GPLv2 et LGPL v2.1
Subversion : Apache 2.0
Système de versions simultanées (CVS) : GNU
Vesta : LGPL
Mercurial : GNU GPL v2+

Voici à quoi ressemble un pipeline DevOps avec l'ajout de contrôles de code source.

Guide du débutant : création d'un pipeline DevOps

Un outil CI/CD peut automatiser les processus de révision, d'acquisition du code source et de collaboration entre les membres. Pas mal? Mais comment en faire une application fonctionnelle afin que des milliards de personnes puissent l’utiliser et l’apprécier ?

Étape 3 : Créer un outil d'automatisation de la construction

Super! Vous pouvez réviser le code et apporter des modifications au contrôle de code source, et inviter vos amis à collaborer au développement. Mais vous n'avez pas encore créé d'application. Pour créer une application Web, elle doit être compilée et conditionné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é tel que JavaScript ou PHP n'a pas besoin d'être compilé).

Utilisez un outil d'automatisation de build. Quel que soit l'outil d'automatisation de build que vous décidez d'utiliser, ils ont tous le même objectif : créer le code source dans le format souhaité et automatiser les tâches 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

Marque
GNU
N/D

Grognement
MIT
JavaScript

Gorgée
MIT
JavaScript

Constructeur
Apache
Rubi

Râteau
MIT
Rubi

PAA
GNU
Python

SCons
MIT
Python

BitBake
GPLv2
Python

Gâteaux
MIT
C#

ASDF
Expatrié (MIT)
ZÉZAYER

Cabale
BSD
Haskell

Super! Vous pouvez placer les fichiers de configuration de l'outil d'automatisation de build dans votre système de contrôle de code source et laisser votre outil CI/CD tout mettre en place.

Guide du débutant : création d'un pipeline DevOps

Tout va bien, n'est-ce pas ? Mais où déployer votre application ?

Étape 4 : Serveur d'applications Web

Pour l'instant, vous disposez d'un fichier packagé 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.

Un serveur d'applications Web n'est qu'un tel conteneur. Le serveur fournit un environnement dans lequel la logique du package en cours de déploiement peut être définie. Le serveur fournit également une interface et propose des services Web en exposant les sockets au 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 apprendrez davantage à ce sujet (même si je couvrirai les conteneurs ci-dessous).

Il existe plusieurs serveurs d'applications Web open source.

Nom
Licence
Langage de programmation

Matou
Apache 2.0
Java

Jetty
Apache 2.0
Java

WildFly
GNU Moins Public
Java

Poisson-Verre
CDDL et GNU moins publics
Java

Django
BSD à 3 clauses
Python

Tornado
Apache 2.0
Python

Gunicorn
MIT
Python

Python
MIT
Python

Rails
MIT
Rubi

Node.js
MIT
javascript

Votre pipeline DevOps est presque prêt à être utilisé. Bon travail!

Guide du débutant : création d'un pipeline DevOps

Bien que vous puissiez vous arrêter là et gérer l’intégration vous-même, la qualité du code est une chose importante dont doit se soucier un développeur d’applications.

Étape 5 : Couverture des tests de code

La mise en œuvre de tests peut être une autre exigence fastidieuse, mais les développeurs doivent détecter rapidement tout bug dans l'application et améliorer la qualité du code pour garantir la satisfaction des utilisateurs finaux. Heureusement, il existe de nombreux outils open source pour tester votre code et formuler des recommandations pour améliorer sa qualité. Ce qui est encore mieux, c'est que la plupart des outils CI/CD peuvent se connecter à ces outils et automatiser le processus.

Les tests de code se composent de deux parties : des frameworks de tests de code qui vous aident à écrire et à exécuter des tests, et des outils de suggestion qui vous aident à améliorer la qualité de votre code.

Systèmes de test de code

Nom
Licence
Langage de programmation

JUnit
Eclipse Public License
Java

FacileMock
Apache
Java

mockito
MIT
Java

PowerMock
Apache 2.0
Java

Pytest
MIT
Python

Hypothèse
Mozilla
Python

Tox
MIT
Python

Systèmes de recommandation pour l’amélioration du code

Nom
Licence
Langage de programmation

Couverture
GNU
Java

CodeCouverture
Eclipse publique (EPL)
Java

Couverture.py
Apache 2.0
Python

Emma
Licence publique commune
Java

JaCoCo
Eclipse Public License
Java

Hypothèse
Mozilla
Python

Tox
MIT
Python

Jasmine
MIT
JavaScript

Karma
MIT
JavaScript

Mocha
MIT
JavaScript

il y a
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é les outils de couverture de tests, votre pipeline DevOps devrait ressembler au diagramme présenté au début de ce didacticiel.

Étapes supplémentaires

Containers

Comme je l'ai dit, vous pouvez héberger votre serveur sur une machine virtuelle ou un serveur, mais les conteneurs sont une solution populaire.

Que sont les conteneurs ? En bref, une machine virtuelle a besoin d'une énorme quantité de mémoire du système d'exploitation, dépassant la taille de l'application, tandis qu'un 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 qu'il existe d'autres options de conteneurs, les plus populaires sont Docker et Kubernetes.

Docker : Apache 2.0
Kubernetes : Apache 2.0

Outils d'automatisation intermédiaires

Notre pipeline DevOps est principalement axé sur la création et le déploiement d'applications collaboratives, mais de nombreuses autres choses peuvent être réalisées avec les outils DevOps. L’un d’eux est l’utilisation d’outils Infrastructure as Code (IaC), également appelés outils d’automatisation middleware. Ces outils permettent d'automatiser l'installation, la gestion et d'autres tâches du middleware. Ainsi, par exemple, un outil d'automatisation peut extraire des applications telles qu'un serveur d'applications Web, une base de données et un outil de surveillance avec les configurations correctes et les déployer sur le serveur d'applications.

Voici quelques outils d’automatisation de middleware open source :

Ansible : GNU public
SaltStack : Apache 2.0
Chef : Apache 2.0
Marionnette : Apache ou GPL

Guide du débutant : création d'un pipeline DevOps

Découvrez comment obtenir une profession recherchée à partir de zéro ou passer au niveau supérieur en termes de compétences et de salaire en suivant des cours en ligne payants de SkillFactory :

plus de cours

Utile

Source: habr.com

Ajouter un commentaire