LinuxParty
Este artículo ofrece una descripción general de Jenkins y Docker. También incluye un tutorial sobre cómo configurar Jenkins en Docker.
Jenkins es un servidor de automatización de código abierto y autosuficiente desarrollado inicialmente para la implementación de la integración continua (CI), una práctica de desarrollo. Desde Jenkins 2 en adelante, ha habido un ecosistema de complementos excepcionalmente abundante para integrarse con la cadena de herramientas que ya está en uso en una organización. Esto permite que Jenkins no solo vaya más allá de CI, sino que también implemente varias otras prácticas, como la inspección continua de códigos, la entrega continua, las pruebas continuas, la implementación continua, etc. Prácticamente, esta herramienta puede automatizar casi todos los pasos seguidos en las prácticas mencionadas y sus herramientas, en el orden deseado. Envuelve todas las tareas en una secuencia particular y las divide en varias etapas de DevOps conocidas como la canalización. Por lo tanto, promueve la automatización integral del ciclo de vida de TI.
Jenkins es una aplicación de servidor web que se puede implementar como un servlet en un servidor Java de aplicaciones / contenedores de servlets como GlassFish, Wildfly, IBM WebSphere, etc. Jenkins también proporciona un servidor Jetty incorporado, un servidor de aplicaciones de servlet Java, para que se ejecute como un servidor independiente. Para que una configuración de Jenkins se ejecute en un sistema, lo único que se requiere son los entornos de ejecución de Java 8 (JRE 8). Los requisitos mínimos de hardware son 256 MB de RAM y 1 GB de espacio en disco, mientras que los requisitos recomendados son 1 GB o más de RAM y 10 GB o más (según la escala del proyecto) de espacio en disco.
El lenguaje en el que se escribe Jenkins es Java, lo que facilita el diseño para instalarlo / ejecutarlo en varios sistemas operativos como MacOS, Windows, Linux y sus diferentes sabores como Ubuntu, Red Hat, Debian, así como plataformas como Docker , Microsoft Azure, AWS EC2, etc.
Características de Jenkins:
Jenkins comenzó como un simple servidor de CI y avanzó el ciclo de vida de las aplicaciones de las organizaciones de software mediante la automatización. Viene con muchas características e incluso tiene la disposición de agregar más, con la ayuda de complementos. A continuación se enumeran algunas de las características que Jenkins tiene para ofrecer:
- Fácil de instalar
- Fuente abierta
- Fácil de configurar
- Admite personalización y extensibilidad
- Abundancia de complementos con documentación bien definida
- Crea complementos personalizados
- Admite tuberías de construcción
- Facilita la canalización como un código (Blue Ocean)
- Admite notificaciones de Slack / correo electrónico
- Programación cron
- Proporciona arquitectura de agente maestro para compilaciones distribuidas
- Actualizaciones más rápidas
- La interfaz de usuario es simple y clara.
- Acceso basado en roles
- Admite construcciones promocionadas
Arquitectura de Jenkins
Jenkins, como servidor independiente que opera en una sola máquina, puede prestar servicios solo hasta cierto punto. La calidad del servicio que presta depende de los recursos de la máquina en la que se ejecuta.
Sin embargo, algunos proyectos requieren diferentes plataformas y entornos para construir ciertas etapas. Además, para probar esas compilaciones diferentes, los entornos diferentes son esenciales. Veamos algunos ejemplos de tales entornos:
- Un proyecto requiere JDK 1.7 pero el otro proyecto requiere JDK 1.8.
- Dos proyectos diferentes de Android requieren versiones distintas de una herramienta de compilación (por ejemplo, Gradle 4 y Gradle 4.6).
- Del mismo modo, varios proyectos de iOS pueden depender de diferentes versiones de XCode.
Del mismo modo, cuando se considera una plataforma, los proyectos de desarrollo de iOS dependen de las máquinas iOS, el entorno de Windows en .NET, y algunos pueden requerir el entorno de Linux.
Por lo tanto, una sola máquina no puede cumplir con todos los requisitos previos y las dependencias necesarias para construir y probar el proyecto. Una sola máquina tampoco puede brindar un servicio eficiente si el proyecto es muy grande y requiere construcción y pruebas con mucha frecuencia. Teniendo en cuenta estos escenarios, se puede concluir que un solo servidor Jenkins es incapaz de satisfacer las diversas necesidades de proyectos, unidades de negocios u organizaciones.
Para hacer frente a las limitaciones mencionadas, Jenkins Distributed Architecture, que sigue la arquitectura maestro-agente, ahora se ha convertido en una parte integral de la arquitectura Jenkins. El maestro es donde se ejecuta el servidor principal de Jenkins y el agente es el que se ejecuta en una máquina remota. Solo puede haber un maestro pero muchos agentes. Hay muchas formas en que un agente puede conectarse al maestro pero, en última instancia, necesitan tener comunicación bidireccional, y para esto se utiliza el conjunto de protocolos TCP / IP. La Figura 1 muestra la arquitectura de agente maestro de Jenkins, donde hay un maestro ejecutándose en un sistema MacOS, y los tres agentes conectados se ejecutan en diferentes plataformas como MacOS, Windows y Linux. Para un mejor rendimiento y optimización, se considera mejor si el nodo maestro solo se usa para monitorear y distribuir los trabajos de compilación entre los agentes, y no realiza ninguna compilación en sí mismo. Con esto, los agentes pueden proporcionar una variedad de plataformas y entornos. Además, el maestro puede tener varios trabajos ejecutándose en diferentes nodos simultáneamente, lo que no solo ahorra tiempo sino que también mejora la eficiencia.
Mejores prácticas
Una mejor práctica es una técnica o proceso que generalmente se considera que supera cualquier otro método de hacer algo, ya que produce los mejores resultados posibles en escenarios conocidos. Se siguen las mejores prácticas en todos los campos de trabajo para cumplir con los puntos de referencia y los estándares de calidad. Las mejores prácticas de Jenkins dan como resultado una mejor idea de cómo Jenkins juega un papel crucial a lo largo del ciclo de vida del proyecto para los desarrolladores de software y la alta gerencia. Algunas de las mejores prácticas que se deben seguir al usar Jenkins se enumeran en la Tabla 1.
En la siguiente sección, entenderemos los conceptos básicos de los contenedores.
Docker es una plataforma abierta para desarrollar, implementar y ejecutar aplicaciones dentro de contenedores. El uso de contenedores permite al desarrollador construir, probar e implementar más rápido en un entorno aislado y separar la aplicación del entorno del host.
Contenedores
Las personas a menudo se confunden entre contenedores y máquinas virtuales (VM). Ambos tienen el mismo objetivo: aislar la aplicación de la máquina host y proporcionar sus dependencias en un módulo independiente. Cuando los contenedores de Linux se utilizan para implementar una aplicación, se conoce como contenedorización, que está ganando popularidad por los motivos enumerados en la Tabla 2.
Ahora, como tenemos una idea básica sobre Docker y los contenedores, exploraremos la abstracción subyacente de Docker, poco a poco.
Registro de Docker
Cuando un contenedor Docker está completamente diseñado y es estable para ejecutarse, esta imagen del contenedor se puede publicar en el registro. El registro puede ser público o privado: Docker proporciona su propio registro conocido como Docker Hub. Esto permite a los hosts Docker extraer la imagen del registro y ejecutarla en su sistema. Como se discutió, el host Docker solo necesita el nombre de la imagen Docker y su etiqueta.
Jenkins en Docker
Configuración de un maestro Jenkins en Docker: antes de activar Jenkins en Docker, deberíamos tener Docker instalado en nuestras máquinas.
Prerrequisitos:
- Docker se puede instalar en sistemas operativos Mac, Linux y Windows.
- Si la máquina se ejecuta en Windows, entonces debería ser Windows 10 Pro o la versión Enterprise, porque las otras versiones de Windows carecen de soporte Hyper-V.
Una vez que Docker se ha configurado en la máquina, podemos ejecutar los comandos de Docker. Ejecutemos algunos comandos de Docker y verifiquemos la versión, y veamos si existen contenedores.
Los comandos son:
Version – docker –version Containers – docker ps -a |
En la Figura 3, se ha mostrado la versión y no hay contenedores ejecutándose en el sistema Docker.
Para hacer girar el contenedor, esta imagen debe descargarse primero. La imagen se puede descargar usando el comando docker pull <image_name> , o esto se puede hacer directamente usando el comando docker run y mencionando el nombre de la imagen. Esto verificará las imágenes de Docker, y si la imagen no está disponible, se descargará.
Como ya he descargado la imagen, he emitido directamente el comando de ejecución de Docker, como se muestra en la Figura 4. Cuando una imagen de Docker se ejecuta con éxito, al contenedor se le asigna una ID de contenedor, que se proporciona como un valor de retorno al ejecutar la ventana acoplable ejecutar comando
El comando ejecutado es:
docker run -u root -d 8080:8080 -p 50000:50000 -v /home/ajay/Desktop/jenkins_home:/var/Jenkins_home/ -v /var/run/docker.sock:/var/run/docker.sock --name Jenkins --restart always jenkinsci/blueocean |
Este es un comando completo de una línea. Cuando se activa la ejecución de Docker, el argumento mínimo obligatorio es el nombre de la imagen.
La Tabla 4 enumera los comandos de Docker y ofrece una breve descripción de cada uno.
El contenedor Docker se puede verificar con el comando docker ps -a. Ahora, cuando verificamos el contenedor, se puede ver con los detalles del contenedor, como su nombre, id, hora de creación, estado, puertos (Figura 5).
Configurar un agente Jenkins en Docker
Abra un navegador y vaya a http://localhost:8080. La interfaz de usuario del servidor Jenkins se cargará. Una vez que se realiza la configuración inicial, su página de inicio se verá como se muestra en la Figura 6.
Antes de continuar configurando el agente Jenkins Docker, necesitamos descargar el complemento para Docker. Vaya a Administrar Jenkins> Administrar complementos> Disponible . Aquí, busque en el filtro Docker; de los resultados, descargue el complemento Docker y haga clic en Instalar sin reiniciar. Una vez que el complemento se haya instalado correctamente, vaya a Administrar Jenkins> Configurar sistema. Desplácese hacia abajo y busque la nube, como se muestra en la Figura 7.
Agregue una nueva nube y seleccione Docker. Ahora configure los detalles de la nube Docker y las plantillas del agente Docker. En la sección de la nube de Docker, proporcione un nombre de su elección. Aquí, hemos dado el nombre de docker-master. En la sección URI de Docker Host, indique la ruta de acceso de docker.sock para conectar el servidor Jenkins al demonio Docker. Marque la casilla habilitada para que esté disponible para su uso. Con esto, el servidor / nube Docker se ha configurado. Esta configuración se muestra en la Figura 8.
Es hora de configurar la plantilla del agente Docker. El nombre de cada plantilla de agente debe ser diferente. La etiqueta puede ser la misma para varias plantillas de agente, en caso de que un grupo de agentes sea para un trabajo y se pueda usar según disponibilidad. Pero el nombre de la imagen de Docker debe ser el mismo que el que se extrajo o construyó en el sistema Docker. Esto se muestra en la Figura 9. Jenkins-agent es el nombre de la imagen Docker que se crea utilizando la imagen Jenkins / agent . Esta imagen está configurada con herramientas según los requisitos de la aplicación. Este requisito puede diferir de una aplicación a otra.
En la columna Raíz del sistema de archivos remotos, indique la ubicación dentro del contenedor donde tiene que almacenar los datos de Jenkins Home.
Esta es la configuración más básica del agente Jenkins con Docker. Finalmente, aplique y guarde la configuración. Ahora agregue un nuevo elemento, proporcione cualquier nombre de proyecto y seleccione cualquier tipo de proyecto. Hemos seleccionado el proyecto Freestyle . Mientras configura el trabajo, busque Restringir, donde se puede ejecutar el proyecto. Aquí, ingrese el nombre de la plantilla, que hemos configurado como se muestra en la Figura 10. Configure el trabajo según la aplicación.
-
Docker
- 11 herramientas Docker imprescindibles para simplificar tu flujo de trabajo
- DistroBox: ejecute cualquier distribución de Linux dentro de la terminal de Linux
- Instalar Docker y aprender a manipular contenedores básicos en CentOS y RHEL
- Cómo administrar contenedores usando Podman y Skopeo en RHEL 8
- Docker: la plataforma para la virtualización de nueva generación
- Cómo monitorear contenedores Docker con la herramienta de monitoreo Zabbix
- Instalar Docker en Windows 10 y 11
- Linux y Kubernetes: Al servicio de los objetivos comunes de las empresas
- Mirantis adquiere Docker Enterprise
- Configurar Jenkins en Docker
- Cómo configurar un servidor web Apache simple en un contenedor Docker
- Chuleta de Docker para Administradores de Sistemas
- Cómo conectar los contenedores Docker y mostrarlos en la red
- Cómo gestionar contenedores Docker
- Cómo buscar imágenes docker y lanzar un contenedor