DevOps se está convirtiendo cada vez más en una forma popular de crear y desplegar aplicaciones, lo que se ha traducido en un aumento de la demanda de profesionales de DevOps.
Este artículo cubrirá algunas de las preguntas más frecuentes en las entrevistas sobre DevOps y sus respuestas. Utilizar estas preguntas como núcleo de estudio puede aumentar sus posibilidades de ser contratado o, si es usted un reclutador, pueden ayudarle en el proceso de contratación.
Preguntas y respuestas frecuentes de la entrevista DevOps
¿Qué es DevOps?
DevOps es la forma abreviada de desarrollo y operaciones. Esta práctica de ingeniería de software reúne a los equipos de desarrollo y operaciones para automatizar cada etapa de un proyecto. Un equipo DevOps se centra en la gestión de recursos, la comunicación y el trabajo en equipo.
DevOps es un enfoque destinado a mejorar el trabajo a lo largo del ciclo de vida del desarrollo de software. El proceso DevOps se representa como un bucle infinito, que comprende las etapas de planificación, codificación, construcción, pruebas, lanzamiento, despliegue, funcionamiento y supervisión.
DevOps influye en el ciclo de vida de la aplicación a lo largo de sus fases de planificación, desarrollo, entrega y funcionamiento. Cada fase depende de las demás, y las fases no son específicas de una función. En una verdadera cultura DevOps, cada rol está implicado en cada fase hasta cierto punto.
Cuáles son las diferentes fases en la metodología DevOps
- Desarrollo continuo. Es la fase de planificación y codificación.
- Integración continua. Es la fase en la que el equipo de desarrollo integra los distintos componentes y se asegura de que el código no se rompa.
- Pruebas continuas. Es la fase de pruebas programadas y automatizadas.
- Despliegue continuo. Esta fase garantiza un desarrollo sin problemas, que no afecta al rendimiento de toda la aplicación.
- Supervisión continua. Esta fase garantiza la eficacia general de la aplicación.
- Retroalimentación continua. Se analizan los problemas y el rendimiento comunicados por los usuarios finales.
- Operaciones continuas. Permite a los desarrolladores crear mejores versiones del producto y detectar rápidamente los problemas.
¿Cuáles son los beneficios de DevOps?
Los equipos que adoptan un enfoque DevOps tienden a realizar sus proyectos con mayor rapidez. De este modo, se evitan errores de comunicación, lo que facilita la rápida implementación de mejoras y otros cambios necesarios. El enfoque DevOps fomenta una mayor colaboración entre los equipos de desarrollo y operaciones, donde los objetivos de todos ellos están más alineados. A continuación se resumen algunos de los beneficios:
- Mejora de la comunicación
- Trabajo en equipo y cohesión
- Mejora de la colaboración
- Entrega más rápida de productos de calidad
- Menor complejidad y rápida resolución de problemas
- Mayor escalabilidad y flexibilidad para añadir nuevo código
- Entornos operativos más estables
- Mayor automatización
- Reducción de costes y aprovechamiento de los recursos
- Seguridad mediante herramientas integradas y automatizadas
Nombre algunas herramientas DevOps
- Herramientas de integración continua como Jenkins
- Control de versiones como Git
- Herramientas de construcción como Maven
- Herramientas degestión de la configuración como Chef
- Plataformas de contenedores como Docker
Nombre algunos KPI de DevOps
- Frecuencia de despliegue
- Volumen de cambios
- Tiempo de despliegue
- Tasas de despliegue fallido
- Tiempo de detección
- Tasa de escape de defectos
¿Qué es CI/CD y cuáles son sus ventajas?
Integración continua (IC)
La IC combina herramientas y prácticas que facilitan la entrega rápida de software de alta calidad. De este modo, se eliminan los cuellos de botella y se evitan problemas técnicos en las fases de lanzamiento.
Entrega continua (CD)
Esta práctica automatiza la entrega de los cambios de código, garantizando que el código pueda complementarse rápidamente en producción y que las aplicaciones funcionen correctamente.
Despliegue continuo (DC)
A diferencia de la entrega continua, el objetivo de esta práctica es que no haya intervención humana al desplegar el software en producción. La publicación de código nuevo o modificado en producción está automatizada.
CI/CD implementa DevOps en todo el ciclo de vida de la aplicación. Estas prácticas ayudan a mejorar la productividad en las distintas fases del proceso de desarrollo de software agilizándolas y automatizándolas.
¿Qué es la arquitectura de microservicios y en qué se diferencia de la arquitectura tradicional?
El método tradicional de escribir software es monolítico. Significa que todas las funciones de una aplicación están reunidas en un único bloque. En caso de error o necesidad de actualización, se analiza el código que rige todo el producto.
Genera paradas o incluso cuelgues y representa un gran peligro para la conservación del código. Para los clientes, significa pérdidas y dolores de cabeza.
En una arquitectura de microservicios, las funciones de una aplicación representan un servicio desarrollado e integrado de forma independiente. Los componentes están separados pero trabajan juntos para realizar las tareas correlacionadas.
De este modo, cada servicio independiente se ejecuta sin interferir con los demás, lo que también se aplica en caso de fallo. Si una función falla, es posible ajustarla sin comprometer el funcionamiento de toda la aplicación.
Los microservicios llegan para hacer que DevOps sea aún más ágil y eficiente, acelerando el desarrollo de principio a fin y haciendo que las aplicaciones sean aún más escalables.
Diferencia entre DevOps y Agile
DevOps es una cultura que fomenta la colaboración entre todos los miembros del equipo implicados en el desarrollo y el mantenimiento del software.
Agile es una metodología de desarrollo diseñada para que los equipos sean productivos e impulsen las versiones en función de las necesidades cambiantes.
¿Qué es la infraestructura como código?
La infraestructura como código es el enfoque para definir la infraestructura informática y de red, que utiliza técnicas de gestión del código fuente y se trata como cualquier sistema de software.
Este código puede mantenerse en control de código fuente para permitir su audibilidad y su construcción reproducible, sujeto a prácticas de prueba y a toda la disciplina de la entrega continua.
Lainfraestructura como código se basa en unas cuantas prácticas:
- Utilizar archivos de definición
- Sistemas y procesos autodocumentados
- Versionar todos los elementos
- Probar continuamente los sistemas y procesos
- Pequeños cambios en lugar de lotes
- Mantenga los servicios disponibles continuamente
¿Cuál es el papel de AWS en DevOps?
AWS dispone de un conjunto de servicios flexibles que ayudan a las empresas a desarrollar aplicaciones de forma fiable y rápida. Los servicios de AWS simplifican la implementación de código, el aprovisionamiento y la simplificación de la infraestructura, la automatización de los procesos de lanzamiento de software y la monitorización del rendimiento de la infraestructura.
¿Para qué sirve SSH?
SSH (Secure Shell) es un protocolo que permite una conexión segura entre diferentes ordenadores. SSH sirve para diferentes propósitos, como ofrecer; autenticación fuerte, encriptación fuerte, mantener la integridad de la conexión, conexión fuerte y seguridad.
¿Qué es una tubería DevOps?
La tubería DevOps es un proceso que abarca varios pasos antes de lanzar un nuevo software. Puede aplicarse en todas las fases del proyecto, desde la integración y las pruebas hasta la entrega y el despliegue. En general, pasa por las siguientes etapas y equipos:
- Visión del producto: define las características del producto;
- Equipo de desarrollo: desarrolla de forma iterativa e incremental;
- Área de operación: implementa y mantiene entornos estables;
- Seguimiento y retroalimentación: buscan generar valor y uso por parte del cliente.
¿Qué es la gestión de la configuración?
Es un proceso de ingeniería de sistemas para establecer y mantener la coherencia del rendimiento y los atributos funcionales y físicos de un sistema/producto a lo largo de su ciclo de vida.
¿Qué son las pruebas continuas?
Son las pruebas programadas y automatizadas de una aplicación a medida que avanza el desarrollo.
¿Qué es Git?
Se trata de una herramienta de código abierto y gratuita para la gestión del código fuente. Esta herramienta está diseñada para gestionar proyectos pequeños y grandes.
Mencione algunos comandos básicos de Git
- Git clone
git clone <https://name-of-the-repository-link>
- Git branch
git branch <nombre-de-la-bifurcación>
- Git checkout
git checkout <nombre-de-la-rama>
- Git add
git add <archivo>
- Git commit
git commit -m "mensaje de confirmación"
- Git push
git push <fichero> <nombre de la rama>
- Git pull
git pull <remote>
Explique la diferencia entre Git merge y Git rebase
El comando Git merge permite a los desarrolladores fusionar diferentes ramas de Git mientras los registros de commits de las respectivas ramas permanecen intactos.
El comandoGit rebase permite a los desarrolladores integrar los cambios de una rama a otra, y los registros se modifican una vez finalizado el proceso.
Explique la diferencia entre Git fetch y Git pull
Git fetch indica a git que recupere/compruebe los últimos metadatos del original. Sin embargo, no hace ninguna transferencia de archivos sino que sólo comprueba.
Git pull comprueba y trae los cambios del repositorio remoto al proyecto local.
¿Qué es un conflicto de fusión?
Los conflictos de fusión se producen cuando se fusionan dos ramas con commits opuestos. Los conflictos de fusión suelen producirse cuando diferentes desarrolladores cambian la misma línea de código o archivo.
¿Qué es el control de versiones y cuáles son los distintos tipos?
El control de versiones (control del código fuente) es el proceso de seguimiento y gestión de los cambios en el código del software.
Estos son los diferentes tipos de control de versiones
- Centralizado- tienen una única copia «central» del código fuente en un servidor y todos los cambios se consignan en la copia «central». Subversion (SVN) y Perforce son ejemplos de controles de versiones centralizados.
- Distribuidos (DVCS): no tienen un servidor central para almacenar todos los archivos del proyecto. Git y Mercurial son ejemplos de DVCS.
¿Cuáles son las ventajas de utilizar el control de versiones?
- Ayuda a los desarrolladores a preservar la eficiencia y la agilidad
- Proporciona un registro completo de cada cambio realizado en un proyecto/archivo
- Mejora la trazabilidad
- Ayuda a gestionar la fusión y la ramificación
- Permite la colaboración
¿Qué es la ramificación?
La ramificación se refiere a la creación de una versión separada/nueva del repositorio principal. Las ramas le permiten trabajar en varias partes del proyecto sin afectar a la rama principal.
¿Qué son las estrategias de ramificación?
Las estrategias de ramificación son las metodologías que adoptan los equipos de desarrollo de software a la hora de escribir, fusionar y desplegar el código. Este enfoque garantiza que los fallos y errores se corrijan en una fase de la rama antes de que se fusionen con el proyecto principal.
¿Explique algunos tipos de pruebas utilizadas en DevOps?
Pruebas unitarias
Prueban una pieza específica de código de forma aislada. Las pruebas unitarias no deben estar conectadas a la base de datos, utilizar el sistema de archivos, hablar con sistemas externos ni interactuar con componentes del sistema. Esto permite que se ejecuten rápidamente, y se obtiene una rápida respuesta si los cambios han roto la funcionalidad existente.
Pruebas de componentes
Prueban grandes grupos de funciones para poder identificar problemas de este tipo. Suelen ser más lentas, ya que requieren una configuración más compleja y más E/S para conectarse a una base de datos, un sistema de archivos u otros sistemas.
Pruebas de despliegue
Estas pruebas verifican que el despliegue ha funcionado, es decir, que su aplicación está correctamente instalada, configurada, puede acceder a los servicios que necesita y responde.
Aparte de éstas, también hay pruebas de explotación y de usabilidad. Para saber más sobre las pruebas, consulte el artículo sobre los tipos de pruebas de aplicaciones.
¿Qué son las pruebas de automatización y cómo automatizar las pruebas en DevOps?
Las pruebas de automatización son una técnica de revisión y validación automática del código. Las pruebas de automatización se realizan para comprobar si se han cumplido los estándares de calidad en cuanto a funcionalidad (lógica empresarial), estilo del código y experiencia del usuario.
Las pruebas de automatización se realizan utilizando herramientas como Selenium y Katalon.
¿Qué es la automatización de la compilación y cuáles son algunas herramientas de automatización de la compilación?
Las herramientas de automatización de la compilación especifican cómo se debe compilar el software (qué pasos hay que dar y en qué orden) y qué dependencias son necesarias (qué otro software debe estar presente para que la compilación tenga éxito).
Algunas herramientas son más adecuadas para proyectos en lenguajes de programación específicos, como Maven y Ant de Apache, que, aunque la tecnología puede utilizarse con otros lenguajes, se emplean sobre todo en proyectos Java. Otras, como Hudson o Jenkins, pueden utilizarse más ampliamente con diversos proyectos.
¿Qué es Jenkinsfile?
Jenkinsfile es un archivo de texto que contiene la definición de un pipeline Jenkins. Jenkinsfile se registra en el repositorio de control de fuentes. Algunos de sus usos son; permite una pista de auditoría para el pipeline, permite la revisión del código y la iteración sobre el pipeline, y proporciona una única fuente de verdad en el pipeline.
Explique la arquitectura en Jenkins
Jenkins tiene una arquitectura maestro-esclavo. Esto significa que hay muchos ‘esclavos’ trabajando para un ‘maestro’. De este modo, la compilación distribuida de Jenkins puede ejecutar pruebas idénticas en diferentes entornos, con los resultados recogidos y combinados en el nodo maestro para su supervisión.
¿Cuáles son los principales plugins de Jenkins?
- Plugin Blue Ocean para Jenkins
- Plugin Mailer para Jenkins
- Plugin Git para Jenkins
- Plugin Jira para Jenkins
- Plugin Docker para Jenkins
- Plugin de integración de Maven para Jenkins
- Plugin Kubernetes para Jenkins
- Plugin SonarQube para Jenkins
- Plugin de Amazon EC2 para Jenkins
¿Qué es Selenium IDE?
Selenium IDE es una herramienta que registra las interacciones del navegador para los casos de prueba. Puede establecer puntos de interrupción y comprobar y pausar variables cuando se produzcan errores con el Entorno de Desarrollo Integrado Selenium.
¿Cuáles son los diferentes componentes de Selenium?
- Selenium IDE
- Selenium RC
- Selenium WebDriver
- Selenium Grid
¿Cuáles son los diferentes tipos de pruebas en Selenium?
- Pruebas de extremo a extremo
- Pruebas de regresión
- Pruebas de sistema
- Pruebas de rendimiento
- Pruebas de compatibilidad
¿Cuáles son las diferentes excepciones en Selenium?
- Excepción ElementNotSelectableException
- NoAlertPresentException
- InvalidSelectorException
- Excepción NoSessionException
- StaleElementReferenceException
- Excepción NoSuchWindowException
- Excepción NoSuchFrameException
- NoSuchElementException
- Excepción de tiempo de espera
- Excepción ElementNotVisibleException
¿Qué son driver.close() y driver.quit() en WebDriver?
El comando driver .close
() cierra la ventana del navegador en foco. Si sólo hay un navegador abierto, cierra toda la sesión del navegador.
El comando driver .
quit() cierra toda la sesión del navegador con las ventanas emergentes, pestañas y ventanas del navegador.
¿Qué es un Dockerfile?
Dockerfile es un documento de texto con todos los comandos que un usuario puede utilizar en una línea de comandos para montar una imagen.
Diferencias entre imágenes Docker y contenedor Docker
Las imágenes Docker son plantillas de sólo lectura elaboradas con códigos fuente, herramientas, bibliotecas, dependencias externas y otros archivos necesarios para que cualquier aplicación se ejecute correctamente en cualquier sistema operativo o plataforma.
Un contenedor Docker es una caja que ejecuta plantillas de imágenes Docker.
Explique la arquitectura de Docker
Docker sigue una arquitectura Cliente-Servidor y consta de Cliente Docker, Host Docker y Registro Docker.
El Cliente Docker utiliza APIs REST y comandos para comunicarse con el Servidor (Docker Daemon).
El Cliente Docker utiliza CLI para ejecutar estos comandos
docker build
docker pull
docker run
- Docker Host proporciona un entorno para ejecutar y ejecutar aplicaciones. Se compone de un demonio Docker, almacenamiento, imágenes, contenedores y redes.
- Docker Registry gestiona y almacena imágenes Docker.
Plataformas en la nube que soportan docker
Las plataformas que soportan el alojamiento Docker son
- Kamatera
- Google Cloud Run
- A2 Hosting
- StackPath
- Sloppy.io
- Amazon ECS
- Microsoft Azure
- HostPresto
- Vultr
¿Cuál es la diferencia entre los contenedores y las máquinas virtuales?
Tanto los contenedores como las máquinas virtuales trabajan con la virtualización y el aislamiento de entornos para promover el procesamiento independiente de las aplicaciones. Aún así, los Conten edores crean entornos aislados en los que diferentes aplicaciones pueden ejecutarse simultáneamente porque la división se realiza a nivel de los recursos disponibles, como la memoria y el procesamiento. Por otro lado, la Máquina Virtual permite que una máquina física albergue otras con diferentes sistemas operativos, discos duros y hardware independientes de los originales.
¿Cuál es la principal diferencia entre Docker y Kubernetes?
Docker es una de las herramientas de contenedores DevOps más utilizadas. Se centra en la portabilidad de las aplicaciones, colocándolas en contenedores tecnológicos y sistemas de empaquetado y trasladándolas a través de diferentes plataformas.
Al mismo tiempo, Kubernetes es una herramienta de orquestación de contenedores que puede agrupar contenedores por categorización lógica. Puede desplegarse en varios equipos mediante una distribución automatizada.
Más información sobre Kubernetes Vs. Docker.
¿Qué significa virtualización de plataformas y cuáles son sus ventajas?
La virtualización de plataformas significa simular un sistema informático completo para ejecutar varias instancias de sistemas operativos simultáneamente en una única máquina física.
En esta configuración, un monitor de máquina virtual (VMM), o hipervisor, tiene el control total de los recursos de hardware de la máquina física. Los sistemas operativos invitados se ejecutan en máquinas virtuales, que gestiona el VMM. La virtualización del entorno consiste en simular una o varias máquinas virtuales y las conexiones de red entre ellas.
La virtualización puede ayudar a reducir el tiempo dedicado al despliegue y los riesgos asociados al mismo de varias maneras. El uso de máquinas virtuales en el despliegue es de gran ayuda para lograr una gestión eficaz de la configuración vertical y horizontalmente en todos sus sistemas.
En concreto, el uso de la virtualización aporta las siguientes ventajas:
- Respuesta rápida a los requisitos cambiantes
- Consolidación
- Estandarización
- Facilidad de mantenimiento de las líneas de base
¿Qué es Nagios?
Nagios es una herramienta que supervisa toda la infraestructura de TI para garantizar que los procesos de negocio, sistemas, servicios y aplicaciones funcionan correctamente.
¿Cómo funciona Nagios?
- Monitorización. El personal de TI configura Nagios para supervisar los protocolos de red, las métricas del sistema, las aplicaciones, la infraestructura de red, los servicios y los servidores.
- Alertas. Nagios envía alertas cuando los componentes críticos fallan. Las alertas pueden ser a través de SMS, código personalizado o correos electrónicos.
- Respuesta. El equipo de TI reconoce las alertas y actúa.
- Informes. Se generan informes que proporcionan un registro histórico de notificaciones, interrupciones, respuestas a alertas y eventos para su posterior revisión.
- Mantenimiento. El tiempo de inactividad programado evita que se envíen alertas durante el mantenimiento.
Mencionar algunos plugins de Nagios
- Pluginsoficiales de Nagios-desarrollados y mantenidos por el equipo oficial
- Pluginspersonalizados-escritos por individuos/empresas para adaptarse a las necesidades individuales
- Pluginscomunitarios-desarrollados por los miembros de la comunidad Nagios
Explicar la virtualización con Nagios
Nagios ofrece la capacidad de monitorizar varias métricas en varias plataformas de virtualización. Nagios puede ejecutarse desde varias plataformas de virtualización como Xen, Amazon EC2, VMware y Microsoft Virtual PC.
¿Cómo ayuda Nagios con la monitorización?
Nagios utiliza agentes como NRPE, check_mk o SNMP para recopilar estadísticas en su servidor y enviar una alerta si las métricas están por encima del umbral predefinido.
¿Qué números de puerto utiliza Nagios para la monitorización?
SNMP, puertos 161 y 162
¿Qué es un analizador de red Nagios?
El analizador de red Nagios es un software de análisis de datos sflow que permite a los usuarios resolver de forma proactiva comportamientos anormales, interrupciones y amenazas a la seguridad antes de interrumpir las operaciones de negocio. Esta herramienta de calidad comercial ofrece una visión ampliada del tráfico de red y de la infraestructura de TI.
Variables que afectan a la herencia y la recursividad en Nagios
- Nombre-un‘nombre’ de plantilla que puede heredar las variables/propiedades del objeto.
- Use- especifique el nombre del objeto de la plantilla del que desea heredar variables/ propiedades.
- Registrar- indica si el nombre del objeto de la plantilla debe ser ‘registrado’ con Nagios.
¿Qué es Puppet?
Puppet es una herramienta de código abierto para la gestión de la configuración y el despliegue de software.
¿Qué es un manifiesto de Puppet?
El manifiesto de Puppet es un archivo que contiene el lenguaje de configuración de Puppet que describe como deben ser configurados los recursos.
¿Qué es el código de Puppet?
El código de Puppet es un código declarativo, lo que significa que se describe utilizando el estado deseado de su sistema y no los pasos necesarios para llegar a él.
¿Qué es Chef?
Chef es una herramienta de gestión de la configuración que convierte la infraestructura en código. Esta herramienta se centra en la escritura de código en lugar del proceso manual.
¿Cómo funciona Chef?
El trabajo de Chef comienza cuando los administradores de sistemas o los desarrolladores definen las tareas que deben automatizarse. A continuación, los libros de cocina y las recetas (pequeños programas escritos en un lenguaje específico del dominio) se capturan y prueban utilizando diversas herramientas como Test Kitchen, ChefSpec y Foodcritic.
Si los libros de cocina y las recetas funcionan como se espera, se despliegan entonces en el servidor Chef utilizando las herramientas de línea de comandos knife y chef. Un proceso de despliegue de Chef tiene un servidor Chef, estaciones de trabajo y nodos. Puede elegir entre más de 3000 plantillas de libros de cocina y personalizarlas según sus necesidades. Chef se encargará entonces del resto del trabajo.
Háblenos de su experiencia en la gestión de proyectos DevOps
Las habilidades DevOps no se limitan a los conocimientos técnicos y requieren habilidades humanas y de gestión que a menudo se encuentran entre los gerentes, directores de programas y gestores de proyectos.
Es esencial saber gestionar y apoyar el cambio, proporcionar una pasarela para facilitar la transferencia de nuevas versiones de código a la parte de operaciones, evaluar y supervisar las distintas plataformas y herramientas para medir el rendimiento, y analizar y compartir los resultados para mejorar las entregas futuras, etc.
Aborde esta pregunta con metodología y explique su trayectoria en la resolución de problemas complejos. ¿Cómo piensa proceder para mejorar el funcionamiento de las infraestructuras? ¿Cómo piensa colaborar con los desarrolladores de front, middle y back-office? ¿Qué herramientas de supervisión domina? Asimismo, considere la posibilidad de compartir sus experiencias en la resolución de conflictos dentro de su equipo.
Resumen
Según Glassdoor, el salario medio de un ingeniero DevOps es de 104.281 dólares al año en Estados Unidos. Aunque DevOps es una carrera nueva, ahora podemos ver más empresas que contratan para este papel y publican varios cursos para equipar a los profesionales con las habilidades esenciales. Arriba encontrará algunas preguntas que probablemente encontrará en una entrevista sobre DevOps.
También puede explorar algunos buenos cursos en línea para aprender DevOps.
Con aportaciones de Titus Kamunya.