Le DevOps devient de plus en plus un moyen populaire de créer et de déployer des applications, ce qui se traduit par une demande croissante de professionnels du DevOps.
Cet article aborde certaines des questions les plus fréquemment posées lors des entretiens DevOps, ainsi que leurs réponses. En utilisant ces questions comme base d’étude, vous pouvez augmenter vos chances d’être embauché ou, si vous êtes recruteur, elles peuvent vous aider dans le processus d’embauche.
Questions d’entretien DevOps les plus fréquemment posées et leurs réponses
Qu’est-ce que DevOps ?
DevOps est l’abréviation de development and operations (développement et opérations). Cette pratique d’ingénierie logicielle réunit les équipes de développement et d’exploitation afin d’automatiser chaque étape d’un projet. Une équipe DevOps se concentre sur la gestion des ressources, la communication et le travail d’équipe.
DevOps est une approche visant à améliorer le travail tout au long du cycle de vie du développement logiciel. Le processus DevOps est décrit comme une boucle infinie, comprenant les étapes de planification, de codage, de construction, de test, de libération, de déploiement, d’exploitation et de surveillance.
DevOps influence le cycle de vie des applications tout au long des phases de planification, de développement, de livraison et d’exploitation. Chaque phase dépend des autres, et les phases ne sont pas spécifiques à un rôle. Dans une véritable culture DevOps, chaque rôle est impliqué dans chaque phase à un certain degré.
Quelles sont les différentes phases de la méthodologie DevOps ?
- Développement continu. Il s’agit de la phase de planification et de codage.
- Intégration continue. Il s’agit de la phase au cours de laquelle l’équipe de développement intègre différents composants et s’assure que le code ne se casse pas.
- Tests continus. Il s’agit de la phase de test préprogrammée et automatisée.
- Déploiement continu. Cette phase garantit un développement sans problème, qui n’affecte pas les performances de l’ensemble de l’application.
- Surveillance continue. Cette phase garantit l’efficacité globale de l’application.
- Retour d’information continu. Les problèmes et les performances signalés par les utilisateurs finaux sont analysés.
- Opérations continues. Permet aux développeurs d’élaborer de meilleures versions du produit et de détecter rapidement les problèmes.
Quels sont les avantages de DevOps ?
Les équipes qui adoptent une approche DevOps ont tendance à réaliser leurs projets plus rapidement. Ainsi, les erreurs de communication sont évitées, ce qui facilite la mise en œuvre rapide des améliorations et autres changements nécessaires. L’approche DevOps encourage une plus grande collaboration entre les équipes de développement et d’exploitation, où les objectifs de tous sont plus alignés. Vous pouvez résumer certains des avantages comme suit :
- Amélioration de la communication
- Travail d’équipe et cohésion
- Amélioration de la collaboration
- Livraison plus rapide de produits de qualité
- Réduction de la complexité et résolution rapide des problèmes
- Une plus grande évolutivité et une plus grande souplesse pour ajouter de nouveaux codes
- Environnements d’exploitation plus stables
- Une plus grande automatisation
- Réduction des coûts et utilisation des ressources
- Sécurité grâce à des outils intégrés et automatisés
Citez quelques outils DevOps
- Outils d’intégration continue tels que Jenkins
- Contrôle de version tel que Git
- Outils de construction tels que Maven
- Outils degestion de la configuration tels que Chef
- Plateformes de conteneurs telles que Docker
Citez quelques KPI DevOps
- Fréquence de déploiement
- Volume des changements
- Temps de déploiement
- Taux d’échec des déploiements
- Détection du temps
- Taux d’élimination des défauts
Qu’est-ce que l’intégration continue et quels sont ses avantages ?
Intégration continue (IC)
L’intégration continue combine des outils et des pratiques qui facilitent la livraison rapide de logiciels de haute qualité. Ainsi, les goulets d’étranglement sont éliminés et les problèmes techniques sont évités dans les phases de lancement.
Livraison continue (CD)
Cette pratique automatise la livraison des modifications de code, ce qui garantit que le code peut être rapidement complété en production et que les applications fonctionnent correctement.
Déploiement continu (CD)
Contrairement à la livraison continue, l’objectif de cette pratique est qu’il n’y ait pas d’intervention humaine lors du déploiement du logiciel en production. La publication d’un code nouveau ou modifié en production est automatisée.
CI/CD met en œuvre DevOps tout au long du cycle de vie de l’application. Ces pratiques permettent d’améliorer la productivité dans les différentes phases du processus de développement logiciel en les rationalisant et en les automatisant.
Qu’est-ce que l’architecture microservices et en quoi est-elle différente de l’architecture traditionnelle ?
La méthode traditionnelle d’écriture de logiciels est monolithique. Cela signifie que toutes les fonctions d’une application sont regroupées en un seul bloc. En cas d’erreur ou de nécessité de mise à jour, le code qui régit l’ensemble du produit est analysé.
Cela génère des arrêts, voire des plantages, et représente un grand danger pour la conservation du code. Pour les clients, cela signifie des pertes et des maux de tête.
Dans une architecture microservices, les fonctions d’une application représentent un service développé et intégré de manière indépendante. Les composants sont séparés mais travaillent ensemble pour exécuter les tâches corrélées.
De cette manière, chaque service indépendant fonctionne sans interférer avec les autres, ce qui s’applique également aux cas de défaillance. En cas de défaillance d’une fonction, il est possible de l’ajuster sans compromettre le fonctionnement de l’ensemble de l’application.
Les microservices permettent de rendre DevOps encore plus agile et efficace, en accélérant le développement de bout en bout et en rendant les applications encore plus évolutives.
Différence entre DevOps et Agile
DevOps est une culture qui favorise la collaboration entre tous les membres de l’équipe impliqués dans le développement et la maintenance des logiciels.
Agile est une méthodologie de développement conçue pour rendre les équipes productives et pour produire des versions en fonction de l’évolution des besoins.
Qu’est-ce que l’infrastructure en tant que code ?
L’infrastructure en tant que code est l’approche de la définition de l’infrastructure informatique et de réseau, qui utilise des techniques de gestion du code source et est traitée comme n’importe quel système logiciel.
Ce code peut être conservé dans le contrôle de la source pour permettre l’audibilité et la construction reproductible, sous réserve des pratiques de test et de la discipline complète de la livraison continue.
L’infrastructure en tant que code repose sur quelques pratiques :
- Utiliser des fichiers de définition
- Systèmes et processus auto-documentés
- Versionner tous les éléments
- Tester continuellement les systèmes et les processus
- Petites modifications au lieu de lots
- Maintenir les services disponibles en permanence
Quel est le rôle d’AWS dans DevOps ?
AWS dispose d’un ensemble de services flexibles qui aident les entreprises à développer des applications de manière fiable et rapide. Les services AWS simplifient le déploiement du code, le provisionnement et la simplification de l’infrastructure, l’automatisation des processus de publication des logiciels et le contrôle des performances de l’infrastructure.
Quelle est l’utilité de SSH ?
SSH (Secure Shell) est un protocole qui permet une connexion sécurisée entre différents ordinateurs. SSH sert différents objectifs, tels que l’authentification forte, le cryptage fort, le maintien de l’intégrité de la connexion, la connexion forte et la sécurité.
Qu’est-ce qu’un pipeline DevOps ?
Le pipeline DevOps est un processus qui englobe plusieurs étapes avant la publication d’un nouveau logiciel. Il peut être appliqué à toutes les phases du projet, de l’intégration et des tests à la livraison et au déploiement. En général, il passe par les étapes et les équipes suivantes :
- Vision du produit : définit les caractéristiques du produit ;
- Équipe de développement : développe de manière itérative et incrémentale ;
- Zone d’exploitation : met en œuvre et maintient des environnements stables ;
- Suivi et retour d’information : cherchent à générer de la valeur et à être utilisés par le client.
Qu’est-ce que la gestion de la configuration ?
Il s’agit d’un processus d’ingénierie de système visant à établir et à maintenir la cohérence des performances et des attributs fonctionnels et physiques d’un système/produit tout au long de son cycle de vie.
Qu’est-ce qu’un test continu ?
Il s’agit de tests préprogrammés et automatisés d’une application au fur et à mesure de son développement.
Qu’est-ce que Git ?
Il s’agit d’un outil libre et gratuit de gestion du code source. Cet outil est conçu pour gérer les petits et les grands projets.
Mentionnez quelques commandes de base de Git
- Git clone
git clone <https://name-of-the-repository-link>
- Git branch
git branch <branch-name>
- Git checkout
git checkout <nom-de-votre-branche>
- Git add
git add <file>
- Git commit
git commit -m "message de commit"
- Git push
git push <remote> <branch-name>
- Git pull
git pull <remote>
Expliquez la différence entre Git merge et Git rebase
La commande Git merge permet aux développeurs de fusionner différentes branches Git tout en conservant les logs des commits des branches respectives.
La commandeGit rebase permet aux développeurs d’intégrer les modifications d’une branche à une autre, et les journaux sont modifiés une fois le processus terminé.
Expliquez la différence entre Git fetch et Git pull
Git fetch demande à git de récupérer/vérifier les dernières métadonnées de l’original. Cependant, il n’effectue aucun transfert de fichier, mais se contente de vérifier.
Git pull vérifie et apporte les modifications du dépôt distant au projet local.
Qu’est-ce qu’un conflit de fusion ?
Les conflits de fusion se produisent lorsque vous fusionnez deux branches avec des commits concurrents. Les conflits de fusion se produisent généralement lorsque différents développeurs modifient la même ligne de code ou le même fichier.
Qu’est-ce que le contrôle de version et quels en sont les différents types ?
Le contrôle de version (contrôle de source) est le processus de suivi et de gestion des modifications apportées au code d’un logiciel.
Voici les différents types de contrôle de version ;
- Centralisé – une seule copie “centrale” du code source est conservée sur un serveur et toutes les modifications sont transférées sur la copie “centrale”. Subversion (SVN) et Perforce sont des exemples de contrôle de version centralisé.
- Distribué (DVCS)– il n’y a pas de serveur central pour stocker tous les fichiers du projet. Git et Mercurial sont des exemples de DVCS.
Quels sont les avantages de l’utilisation du contrôle de version ?
- Il aide les développeurs à conserver leur efficacité et leur souplesse
- Fournit un journal complet de toutes les modifications apportées à un projet ou à un fichier
- Améliore la traçabilité
- Aide à gérer les fusions et les ramifications
- Permet la collaboration
Qu’est-ce que le branchement ?
Le branchement consiste à créer une nouvelle version distincte du référentiel principal. Les branches vous permettent de travailler sur différentes parties du projet sans impacter la branche principale.
Que sont les stratégies de branchement ?
Les stratégies de fusion sont les méthodologies que les équipes de développement logiciel adoptent lors de l’écriture, de la fusion et du déploiement du code. Une telle approche garantit que les bogues et les erreurs sont corrigés au niveau d’une branche avant d’être fusionnés avec le projet principal.
Expliquez quelques types de tests utilisés dans DevOps ?
Tests unitaires
Ils testent un morceau de code spécifique de manière isolée. Les tests unitaires ne doivent pas être connectés à la base de données, utiliser le système de fichiers, communiquer avec des systèmes externes ou interagir avec des composants du système. Cela leur permet de s’exécuter rapidement, et vous obtenez un retour d’information rapide si des changements ont cassé des fonctionnalités existantes.
Tests de composants
Ils testent de grands groupes de fonctionnalités afin d’identifier les problèmes de ce type. Ils sont généralement plus lents, car ils nécessitent une configuration plus complexe et davantage d’E/S pour se connecter à une base de données, à un système de fichiers ou à d’autres systèmes.
Tests de déploiement
Ces tests permettent de vérifier que le déploiement a fonctionné, c’est-à-dire que votre application est correctement installée, configurée, qu’elle peut accéder aux services dont elle a besoin et qu’elle réagit.
En outre, il existe également des tests d’exploitation et d’utilisabilité. Pour en savoir plus sur les tests, consultez l’article sur les types de tests d’application.
Qu’est-ce que les tests d’automatisation et comment les automatiser dans le cadre de DevOps ?
Les tests d’automatisation sont une technique d’examen et de validation automatiques du code. Les tests d’automatisation sont effectués pour vérifier si les normes de qualité en matière de fonctionnalité (logique commerciale), de style de code et d’expérience utilisateur ont été respectées.
Les tests d’automatisation sont réalisés à l’aide d’outils tels que Selenium et Katalon.
Qu’est-ce que l’automatisation de la construction et quels sont les outils d’automatisation de la construction ?
Les outils d’automatisation de la construction spécifient comment le logiciel doit être construit (quelles étapes doivent être réalisées et dans quel ordre) et quelles sont les dépendances requises (quels autres logiciels doivent être présents pour que la construction soit réussie).
Certains outils sont mieux adaptés à des projets dans des langages de programmation spécifiques, comme Maven et Ant d’Apache, qui, bien que la technologie puisse être utilisée avec d’autres langages, sont surtout utilisés dans des projets Java. D’autres, comme Hudson ou Jenkins, peuvent être utilisés plus largement avec différents projets.
Qu’est-ce que Jenkinsfile ?
Jenkinsfile est un fichier texte contenant la définition d’un pipeline Jenkins. Le fichier Jenkinsfile est archivé dans le référentiel de contrôle des sources. Il permet notamment d’établir une piste d’audit pour le pipeline, de procéder à une révision du code et à une itération sur le pipeline, et de disposer d’une source unique de vérité pour le pipeline.
Expliquez l’architecture de Jenkins
Jenkins a une architecture maître-esclave. Cela signifie que plusieurs “esclaves” travaillent pour un “maître”. La construction distribuée de Jenkins peut ainsi exécuter des tests identiques sur différents environnements, les résultats étant collectés et combinés sur le nœud maître à des fins de surveillance.
Quels sont les meilleurs plugins Jenkins ?
- Plugin Blue Ocean pour Jenkins
- Plugin Mailer pour Jenkins
- Plugin Git pour Jenkins
- Plugin Jira pour Jenkins
- Plugin Docker pour Jenkins
- Plugin d’intégration Maven pour Jenkins
- Plugin Kubernetes pour Jenkins
- Plugin SonarQube pour Jenkins
- Plugin Amazon EC2 pour Jenkins
Qu’est-ce que Selenium IDE ?
Selenium IDE est un outil qui enregistre les interactions du navigateur pour les cas de test. Vous pouvez définir des points d’arrêt et vérifier et mettre en pause les variables lorsque des erreurs se produisent avec l’environnement de développement intégré Selenium.
Quels sont les différents composants de Selenium ?
- Selenium IDE
- Selenium RC
- Selenium WebDriver
- Grille Selenium
Quels sont les différents types de tests dans Selenium ?
- Tests de bout en bout
- Tests de régression
- Test de système
- Tests de performance
- Tests de compatibilité
Quelles sont les différentes exceptions dans Selenium ?
- ElementNotSelectableException
- NoAlertPresentException
- InvalidSelectorException
- NoSuchSessionException
- StaleElementReferenceException
- NoSuchWindowException
- AucuneSuchFrameException
- NoSuchElementException
- TimeoutException
- ElementNotVisibleException
Que sont les commandes driver.close() et driver.quit() dans WebDriver ?
La commande driver.close()
ferme la fenêtre du navigateur au premier plan. Si un seul navigateur est ouvert, elle ferme toute la session du navigateur.
La commande driver.quit()
ferme toute la session du navigateur avec les pop-ups, les onglets et les fenêtres du navigateur.
Qu’est-ce qu’un fichier Docker ?
Un Dockerfile est un document texte contenant toutes les commandes qu’un utilisateur peut utiliser sur une ligne de commande pour assembler une image.
Différences entre les images Docker et les conteneurs Docker
Les images Docker sont des modèles en lecture seule contenant les codes sources, les outils, les bibliothèques, les dépendances externes et d’autres fichiers nécessaires à l’exécution d’une application sur n’importe quel système d’exploitation ou plateforme.
Un conteneur Docker est une boîte qui exécute les modèles d’images Docker.
Expliquez l’architecture de Docker
Docker suit une architecture client-serveur et comprend Docker Client, Docker Host et Docker Registry.
Leclient D ocker utilise des API REST et des commandes pour communiquer avec le serveur (Docker Daemon).
Le client Docker utilise le CLI pour exécuter les commandes suivantes
docker build
docker pull
docker run
- Docker Host fournit un environnement permettant d’exécuter et de faire fonctionner des applications. Il se compose du démon Docker, du stockage, des images, des conteneurs et des réseaux.
- Leregistre Docker gère et stocke les images Docker.
Plates-formes cloud prenant en charge Docker
Les plateformes qui prennent en charge l’hébergement Docker sont les suivantes ;
- Kamatera
- Google Cloud Run
- A2 Hosting
- StackPath
- Sloppy.io
- Amazon ECS
- Microsoft Azure
- HostPresto
- Vultr
Quelle est la différence entre les conteneurs et les machines virtuelles ?
Les conteneurs et les machines virtuelles fonctionnent tous deux sur la base de la virtualisation et de l’isolation des environnements afin de favoriser le traitement indépendant des applications. Cependant, les conteneurs créent des environnements isolés où différentes applications peuvent s’exécuter simultanément car la division se fait au niveau des ressources disponibles, telles que la mémoire et le traitement. D’autre part, la machine virtuelle permet à une machine physique d’en héberger d’autres avec des systèmes d’exploitation, des disques durs et du matériel différents, indépendamment de ceux d’origine.
Quelle est la principale différence entre Docker et Kubernetes ?
Docker est l’un des outils de conteneurs DevOps les plus utilisés. Il se concentre sur la portabilité des applications, en les plaçant dans des conteneurs technologiques et des systèmes d’emballage et en les déplaçant sur différentes plateformes.
Parallèlement, Kubernetes est un outil d’orchestration de conteneurs qui permet de regrouper les conteneurs par catégories logiques. Il peut être déployé sur plusieurs ordinateurs par le biais d’une distribution automatisée.
Pour en savoir plus sur Kubernetes et Docker.
Que signifie la virtualisation de plateforme et quels en sont les avantages ?
La virtualisation de plateforme consiste à simuler un système informatique complet afin d’exécuter simultanément plusieurs instances de systèmes d’exploitation sur une seule machine physique.
Dans cette configuration, un moniteur de machine virtuelle (VMM), ou hyperviseur, contrôle entièrement les ressources matérielles de la machine physique. Les systèmes d’exploitation invités s’exécutent dans des machines virtuelles, gérées par le VMM. La virtualisation de l’environnement consiste à simuler une ou plusieurs machines virtuelles et les connexions réseau entre elles.
La virtualisation peut contribuer à réduire le temps consacré au déploiement et les risques qui y sont associés de plusieurs manières. L’utilisation de machines virtuelles dans le déploiement est une aide précieuse pour une gestion efficace de la configuration verticale et horizontale de vos systèmes.
En particulier, l’utilisation de la virtualisation apporte les avantages suivants :
- Réponse rapide à l’évolution des besoins
- Consolidation
- Standardisation
- Facilité de maintenance des lignes de base
Qu’est-ce que Nagios ?
Nagios est un outil qui surveille l’ensemble de l’infrastructure informatique afin de s’assurer que les processus, les systèmes, les services et les applications fonctionnent correctement.
Comment Nagios fonctionne-t-il ?
- Lasupervision. L’équipe informatique configure Nagios pour superviser les protocoles du réseau, les métriques du système, les applications, l’infrastructure du réseau, les services et les serveurs.
- L’alerte. Nagios envoie des alertes lorsque des composants critiques tombent en panne. Les alertes peuvent être envoyées par SMS, par code personnalisé ou par email.
- Réponse. L’équipe informatique accuse réception des alertes et agit.
- Rapports. Les rapports qui fournissent un historique des notifications, des arrêts, des réponses aux alertes et des événements sont générés pour un examen ultérieur.
- Maintenance. Les arrêts programmés empêchent l’envoi d’alertes pendant la maintenance.
Mentionnez quelques plugins dans Nagios
- Plugins officiels de Nagios – développés et maintenus par l’équipe officielle
- Pluginspersonnalisés – écrits par des individus/entreprises pour répondre à des besoins individuels
- Lesplugins communautaires – développés par les membres de la communauté Nagios
Expliquez la virtualisation avec Nagios
Nagios offre la possibilité de superviser différentes métriques sur diverses plateformes de virtualisation. Nagios peut fonctionner à partir de différentes plateformes de virtualisation telles que Xen, Amazon EC2, VMware, et Microsoft Virtual PC.
Comment Nagios aide-t-il à la surveillance ?
Nagios utilise des agents comme NRPE, check_mk ou SNMP pour collecter des statistiques sur votre serveur et envoyer une alerte si les métriques sont supérieures au seuil prédéfini.
Quels numéros de port Nagios utilise-t-il pour la supervision ?
SNMP, ports 161 et 162
Qu’est-ce qu’un analyseur de réseau Nagios ?
L’analyseur de réseau Nagios est un logiciel d’analyse de données de flux qui permet aux utilisateurs de résoudre de manière proactive les comportements anormaux, les pannes et les menaces de sécurité avant d’interrompre les activités de l’entreprise. Cet outil de qualité commerciale offre une vision étendue du trafic réseau et de l’infrastructure informatique.
Variables qui affectent l’héritage et la récursion dans Nagios
- Nom – un‘nom’ de modèle qui peut hériter des variables/propriétés de l’objet.
- Use- spécifie le nom de l’objet du modèle dont vous voulez hériter des variables/propriétés.
- Register indique si le nom de l’objet du modèle doit être ‘enregistré’ avec Nagios.
Qu’est-ce que Puppet ?
Puppet est un outil open-source de gestion de configuration et de déploiement de logiciels.
Qu’est-ce qu’un manifeste Puppet ?
Le manifeste Puppet est un fichier qui contient le langage de configuration Puppet qui décrit comment les ressources doivent être configurées.
Qu’est-ce que le code Puppet ?
Le code Puppet est un code déclaratif, ce qui signifie que vous le décrivez en utilisant l’état souhaité de votre système et non les étapes nécessaires pour y parvenir.
Qu’est-ce que Chef ?
Chef est un outil de gestion de la configuration qui convertit l’infrastructure en code. Cet outil se concentre sur l’écriture de code plutôt que sur le processus manuel.
Comment fonctionne Chef ?
Le travail de Chef commence lorsque les administrateurs système ou les développeurs définissent les tâches à automatiser. Les livres de cuisine et les recettes (petits programmes écrits dans un langage spécifique à un domaine) sont ensuite saisis et testés à l’aide de divers outils tels que Test Kitchen, ChefSpec et Foodcritic.
Si les livres de cuisine et les recettes fonctionnent comme prévu, ils sont alors déployés sur le serveur Chef à l’aide des outils de ligne de commande knife et chef. Un processus de déploiement Chef comprend un serveur Chef, des stations de travail et des nœuds. Vous pouvez choisir parmi plus de 3 000 modèles de livres de cuisine et les adapter à vos besoins. Le chef s’occupe alors du reste du travail.
Parlez-nous de votre expérience en matière de gestion de projets DevOps
Les compétences DevOps ne se résument pas à un savoir-faire technique et nécessitent des compétences humaines et managériales que l’on retrouve souvent chez les managers, les directeurs de programme et les chefs de projet.
Il est essentiel de savoir gérer et accompagner le changement, fournir une passerelle pour faciliter le transfert des nouvelles versions de code du côté des opérations, évaluer et surveiller les différentes plateformes et outils pour mesurer la performance, et analyser et partager les résultats pour améliorer les livraisons futures, etc.
Abordez cette question avec méthodologie et expliquez votre parcours dans la résolution de problèmes complexes. Comment comptez-vous vous y prendre pour améliorer le fonctionnement des infrastructures ? Comment envisagez-vous de collaborer avec les développeurs du front, du middle et du back-office ? Quels sont les outils de surveillance que vous maîtrisez ? Pensez également à partager vos expériences en matière de résolution de conflits au sein de votre équipe.
Résumé
Selon Glassdoor, le salaire moyen d’un ingénieur DevOps est de 104281 dollars par an aux États-Unis. Même si DevOps est une nouvelle carrière, nous pouvons maintenant voir plus d’entreprises embaucher pour ce rôle et publier divers cours pour équiper les professionnels avec les compétences essentielles. Voici quelques questions que vous rencontrerez probablement lors d’un entretien DevOps.
Vous pouvez également explorer quelques bons cours en ligne pour apprendre le DevOps.
Avec la contribution de Titus Kamunya.