Como instalar Jenkins con docker sobre ECS de AWS



En este articulo Desplegaremos Jenkins en un servicio de ECS y usaremos un EFS para la persistencias de los datos , es decir guardar las configuración y jobs en un disco EFS de amazon.

ECS trabajas sus servicios con dockers asi que nuestro jenkins sera "dockerizado" ...


¿Por que?
Los siguiente me emociona debido a que es algo de nivel avanzado y es mi primer Post en este blog, ¿por que escogí jenkins en AWS? y mucho más aun ¿por que en un cluster de ECS?

Cuando se avanza en la cultura Devops se llega a un punto donde todo se intenta estandarizar y nada mejor que tratar al servidor jenkins como un componente común; mas aun cuando sabemos que un servidor de jenkins puede ser un punto focal de problemas imagina el tiempo de recuperación de un equipo de desarrollo si su jenkins colapsa o se desconfigura.

Ventajas de este proceso

Jenkins sera trado como un servicio que en cierta forma es un docker administrado por ECS, esto nos da 3 ventajas principales:

Servicio auto recuperable
 No importa que se muera el servicio, ECS puede levantarlo muy facilmente.

Usa menos recursos por ende puede reducir el costo.
El docker de jenkins se puede configurar a 1gb de memoria y a 256 de CPU lo cual puede ser lanzado en una instancia pequeña junto a mas procesos de forma desasistida, ya que lo administrara el cluster de ECS.

Logs en AWS cloudlogs
Como seguimos la buenas practicas de ECS la instancia de Jenkins rara vez sera accedida por SSH así que los logs se podrán consultar en una ruta de AWS Cloud Logs en tiempo real.




Iniciemos

La siguiente es la imagen de la arquitectura posible:


Pre requisitos

Un cluster ECS
Una instancias agregada al cluster (yo usare un spot)
Una ruta ECR
Una ruta de AWSLogs
Archivos de dockerfile
Un EFS
Un ELB public

1 Listas de Pre acciones a realizar por si no las has hecho

Esta lista comprende de todo los elementos por defecto que se debe tener para poder continuar con el objetivo de desplegar un servicio de jenkins


  • Crear de un Cluster
  • Crear de un EFS (para persistencia de dato)
  • Crear un EC2 que permita conectar a el Cluster y al EFS. 
  • Crear de un ECR (para guardar el docker)
  • Crear de un AWSlogs (para ver los logs)
  • Crear un ELB public  (para esconder el ip del servidor)



2 Listas de acciones para crear el servicio

  • Crear un rol para los task definition
  • Crear el docker con jenkins 
  • Crear un task definition de jenkins
  • Crear un servicio que use el task definition de jenkins
  • Configurar jenkins



Crear un rol para los task definition:

Al crear el stask definition se crea automáticamente un rol pero sino se crea puedes guiarte de la siguiente imagen, lo importante es la política del resto puedes ponerle el nombre que quieras.


Crear el docker con jenkins 

ahora hay que crear la imagen de docker con jenkins y subila al ECR en este caso dentro de la imagen instalaremos Docker maven y awscli, para poder con jenkins hacer compilacion de java y build de docker. 
















y por ultimo luego de compilar debemos subir a ECR en la sigueinte imagen muestro el repositorio de ECR donde hare push la imagen que acabamos de crear.













y bueno estos son los comandos que use, pongo en "X" el numero de cuenta en AWS por favor remplazalo por tu numero





Crear un task definition de jenkins

Ahora solo queda seleccionar un taskdefinition de EC2 y configurar lo necesario para usar la imagen de ECR y persistir la data, recuerde 1GB de memoria y 256 de CPU y habilite los puertos 50000 y 8080, Y POR ULTIMO LA RUTA /var/jenkins_home, en este caso habilite la ruta del docker para compartirla con el sistema operativo base y poder compilar imagenes dentro del docker.




























Crear un servicio que use el task definition de jenkins


Comentarios

Entradas populares de este blog

AWS SAM y AWS Lambda docker Container Image tutorial con PYTHON USANDO A...

Solucion: Docker Error: No such container:

Los unicas 4 herramientas que necesitas para volverte un master en Devops