Lorsque l'application ne fonctionne pas, je veux surtout entendre la phrase "le problème est de votre côté" de la part de mes collègues. En conséquence, les utilisateurs souffrent - mais ils ne se soucient pas de la partie de l'équipe responsable de la panne. La culture DevOps est venue juste pour rapprocher le développement et le support et les unir autour d'une responsabilité commune pour le produit final.
Quelles pratiques sont incluses dans le concept de DevOps et pourquoi sont-elles nécessaires? Que font les ingénieurs DevOps et que devraient-ils être capables de faire? Des experts de l'EPAM répondent à ces questions et à d'autres: Kirill Sergeyev, ingénieur système et évangéliste DevOps, et Igor Boyko, ingénieur système leader et coordinateur de l'une des équipes DevOps de l'entreprise.

Pourquoi ai-je besoin de DevOps?
Auparavant, il y avait une barrière entre les développeurs et le support (les soi-disant opérations). Cela semble paradoxal, mais ils avaient des objectifs et des KPI différents, bien qu'ils aient fait une chose commune. L'objectif de développement était de mettre en œuvre les exigences métier le plus rapidement possible et de les ajouter à un produit fonctionnel. Le support était chargé de s'assurer que l'application fonctionnait de manière stable - et tout changement mettait la stabilité en danger. Il existe un conflit d'intérêts - DevOps a semblé le résoudre.
Qu'est-ce que DevOps?
La question est bonne - et controversée: enfin, le monde ne s'est pas encore mis d'accord. EPAM estime que DevOps combine technologie, processus et culture d'interaction au sein de l'équipe. Cette association vise à la livraison continue de valeurs aux utilisateurs finaux.
Kirill Sergeyev : «Les développeurs écrivent le code, les testeurs le vérifient et les administrateurs installent le produit final sur l'environnement de production. Pendant longtemps, ces parties de l'équipe ont été quelque peu fragmentées, puis l'idée est venue de les combiner en un processus commun. C'est ainsi que les pratiques DevOps sont apparues. »
Le jour est venu où les développeurs et les ingénieurs système se sont intéressés au travail de chacun. La barrière entre la production et le support a commencé à s'estomper. C'est ainsi que DevOps a vu le jour, ce qui inclut les pratiques, la culture et le travail d'équipe.

Quelle est l'essence de la culture DevOps?
Le fait que la responsabilité du résultat final incombe à chacun des membres de l'équipe. La chose la plus intéressante et la plus difficile dans la philosophie DevOps est de comprendre qu'une personne en particulier n'est pas seulement responsable de son stade de travail, mais est responsable de la façon dont l'ensemble du produit fonctionnera. Le problème ne se situe sur aucun côté - il est courant, et chaque membre de l'équipe aide à le résoudre.
Le point le plus important de la culture DevOps est de résoudre le problème, et pas seulement d'appliquer la pratique DevOps. De plus, ces pratiques ne sont pas mises en œuvre «du côté de quelqu'un», mais dans l'ensemble du produit. Le projet n'a pas besoin d'un ingénieur DevOps seul - il a besoin d'une solution au problème, et le rôle d'un ingénieur DevOps peut être réparti entre plusieurs membres de l'équipe avec différentes spécialisations.
Quelles sont les pratiques DevOps?
Les pratiques DevOps couvrent toutes les étapes du cycle de vie du logiciel.
Igor Boyko : «Le cas idéal est lorsque nous commençons à utiliser les pratiques DevOps dès le début du projet. Avec les architectes, nous planifions quel type d'application le paysage architectural aura, où il sera situé et comment évoluer, nous choisissons la plateforme. L'architecture de microservices est désormais à la mode - pour cela, nous choisissons un système d'orchestration: nous devons être capables de gérer chaque élément de l'application individuellement et de le mettre à jour indépendamment des autres. Une autre pratique est «l'infrastructure en tant que code». C'est le nom de l'approche dans laquelle l'infrastructure du projet est créée et gérée à l'aide de code, plutôt que par une interaction directe avec les serveurs.
Ensuite, nous passons à la phase de développement. L'une des plus grandes pratiques ici est la création de CI / CD: vous devez aider les développeurs à intégrer les modifications dans le produit rapidement, en petites portions, plus souvent et sans douleur. CI / CD couvre la vérification du code, le remplissage de l'assistant dans la base de code et le déploiement de l'application dans des environnements de test et de production.
Aux étapes CI / CD, le code passe par des portes de qualité. Avec leur aide, ils vérifient que le code issu du poste de travail du développeur répond aux critères de qualité spécifiés. Les tests unitaires et d'interface utilisateur sont ajoutés ici. Pour un déploiement de produit rapide, indolore et ciblé, vous pouvez choisir le type de déploiement approprié.
Les pratiques DevOps ont une place au stade du support du produit fini. Ils sont utilisés pour la surveillance, le retour d'information, la sécurité, la mise en œuvre des changements. DevOps considère toutes ces tâches en termes d'amélioration continue. Nous minimisons les opérations répétitives, les automatisons. Cela inclut également les migrations, les extensions d'application et la prise en charge de la santé. »
Pourquoi les pratiques DevOps sont-elles utiles?
Si nous écrivions un manuel sur les pratiques DevOps modernes, il y aurait trois points sur sa première page: automatisation, publication accélérée et rétroaction rapide des utilisateurs.
Kirill Sergeev : «Le premier est l'automatisation. Nous pouvons automatiser toutes les interactions dans l'équipe: nous avons écrit le code - déployé - vérifié - installé - recueilli les commentaires - retourné au début. Tout cela est automatique.
La seconde consiste à accélérer la sortie et même à simplifier le développement. Il est toujours important pour le client que le produit entre sur le marché dès que possible et commence à en bénéficier plus tôt que les produits concurrents. Le processus de livraison du produit peut être infiniment amélioré: réduire le temps, ajouter des marques de contrôle supplémentaires, améliorer la surveillance.
Troisièmement, l'accélération des commentaires des utilisateurs. S'il a des commentaires, nous pouvons immédiatement apporter des corrections et mettre à jour immédiatement l'application. »

Quelle est la relation entre les concepts «ingénieur système», «ingénieur construction» et «ingénieur DevOps»?
Ils se croisent, mais appartiennent à des zones légèrement différentes.
Ingénieur système chez EPAM est un poste. Ils se déclinent en différents niveaux: du junior au chef-spécialiste.
Un ingénieur en bâtiment est plus probablement un rôle qui peut être joué sur un projet. Maintenant, c'est le nom des personnes responsables de CI / CD.
Un ingénieur DevOps est un spécialiste qui met en œuvre les pratiques DevOps sur un projet.
Pour résumer tout cela, il s'avère quelque chose comme ceci: une personne dans la position d'un ingénieur système joue le rôle d'un ingénieur de construction sur le projet et est impliquée dans la mise en œuvre des pratiques DevOps là-bas.
Que fait exactement un ingénieur DevOps?
Les ingénieurs DevOps ont assemblé toutes les pièces qui composent le projet. Ils connaissent les spécificités du travail des programmeurs, testeurs, administrateurs système et contribuent à simplifier leur travail. Ils comprennent les besoins et les exigences de l'entreprise, son rôle dans le processus de développement - et construisent le processus en tenant compte des intérêts du client.
Nous avons beaucoup parlé d'automatisation - les ingénieurs DevOps le font d'abord. Il s'agit d'un point très important, qui comprend, entre autres, la préparation de l'environnement.
Kirill Sergeyev : «Avant d'introduire des mises à jour du produit, elles doivent être testées sur un environnement tiers. Il est en cours de préparation par les ingénieurs DevOps. Ils insufflent la culture DevOps dans son ensemble au projet: ils introduisent des pratiques DevOps sur toutes les couches de leurs projets. Ces trois principes: automatisation, simplification, accélération - ils amènent partout où ils peuvent atteindre. "
Que doit savoir un ingénieur DevOps?
Dans l'ensemble, il devrait avoir des connaissances dans différents domaines: programmation, utilisation de systèmes d'exploitation, de bases de données, de construction de systèmes et de configurations. La possibilité de travailler avec une infrastructure cloud, une orchestration et des systèmes de surveillance leur est ajoutée.
1. Langages de programmationLes ingénieurs DevOps connaissent plusieurs langages de base pour l'automatisation et peuvent, par exemple, dire au programmeur: «Allez, vous n'installez pas le code manuellement, mais à l'aide de notre script qui automatise tout? Nous allons préparer un fichier de configuration pour cela, il sera pratique de le lire à la fois pour vous et pour nous - et nous pouvons le modifier à tout moment. Et nous verrons qui, quand et pourquoi y apporteront des modifications. »
Un ingénieur DevOps peut apprendre un ou plusieurs de ces langages: Python, Groovy, Bash, Powershell, Ruby, Go. Il n'est pas nécessaire de les connaître à un niveau approfondi - juste les bases de la syntaxe, les principes de la POO, la possibilité d'écrire des scripts simples pour l'automatisation.
2. Systèmes d'exploitationL'ingénieur DevOps doit comprendre sur quel serveur le produit sera installé, dans quel environnement il sera lancé, avec quels services il interagira. Vous pouvez choisir de vous spécialiser dans la famille Windows ou Linux.
3. Systèmes de contrôle de versionSans la connaissance du système de contrôle de version, l'ingénieur DevOps n'est nulle part. Git est actuellement l'un des systèmes les plus populaires.
4. Fournisseurs cloudAWS, Google, Azure - surtout si nous parlons de la direction Windows.
Kirill Sergeyev : «Les fournisseurs de cloud nous fournissent des serveurs virtuels qui s'adaptent parfaitement aux pistes CI / CD.
L'installation de dix serveurs physiques nécessite une centaine d'opérations manuelles. Chaque serveur doit être démarré, installé et configuré manuellement sur le système d'exploitation souhaité, installer notre application sur ces dix serveurs, puis revérifier tout dix fois. Les services cloud remplacent cette procédure par dix lignes de code, et un bon ingénieur DevOps devrait être capable de les gérer. Il économise donc du temps, des efforts et de l'argent - à la fois pour le client et pour l'entreprise. »
5. Systèmes d'orchestration: Docker et KubernetesKirill Sergeyev : «Les serveurs virtuels sont divisés en conteneurs, dans chacun desquels nous pouvons installer notre application. Lorsqu'il y a beaucoup de conteneurs, vous devez les gérer: l'un pour l'activer, l'autre pour le désactiver, quelque part pour effectuer des sauvegardes. Cela devient une affaire assez compliquée pour laquelle un système d'orchestration est nécessaire.
Auparavant, chaque application était engagée sur un serveur distinct - toute modification de son fonctionnement pouvait affecter l'intégrité de l'application. Grâce aux conteneurs, les applications deviennent isolées et s'exécutent séparément - chacune sur sa propre machine virtuelle. Si une panne se produit, il n'est pas nécessaire de perdre du temps à rechercher la cause. Il est plus facile de détruire l'ancien conteneur et d'en ajouter un nouveau. "
6. Systèmes de configuration: Chef, Ansible, PuppetLorsque vous avez besoin de maintenir une flotte de serveurs, vous devez faire beaucoup des mêmes opérations. C'est long et difficile, et même le travail manuel augmente les risques d'erreur. C'est là que les systèmes de configuration viennent à la rescousse. Avec leur aide, ils créent un script facile à lire par les programmeurs, les ingénieurs DevOps et les administrateurs système. Ce script permet d'effectuer automatiquement les mêmes opérations sur les serveurs. Les opérations manuelles (et, par conséquent, les erreurs) diminuent donc.
Quelle carrière l'ingénieur DevOps peut-il construire?
Vous pouvez développer à la fois horizontalement et verticalement.
Igor Boyko : «Du point de vue du développement horizontal, les ingénieurs DevOps ont désormais les perspectives les plus larges. Tout est en constante évolution et vous pouvez acquérir des compétences de différentes manières: des systèmes de contrôle de version à la surveillance, de la gestion de la configuration aux bases de données.
Vous pouvez devenir architecte système si un employé souhaite comprendre le fonctionnement de l'application à toutes les étapes de son cycle de vie, du développement au support. »
Comment devenir ingénieur DevOps?
- Lisez les livres du projet Phoenix et le manuel DevOps. Ce sont les véritables piliers de la philosophie DevOps, le premier étant un roman artistique.
- Apprenez la technologie de la liste ci-dessus: sur vos propres cours ou en ligne.
- Rejoignez-nous en tant qu'ingénieur DevOps pour un projet open source.
- Pratiquez et offrez des pratiques DevOps sur vos projets personnels et professionnels.