¿Porque automatizamos?
Es claro que para ninguna «persona» es agradable ejecutar procesos de forma manual constantemente, a largo plazo suele volverse monótono y aburridor. Con esta in «comodidad» el operador se confía y puede descuidar o desatender alguna etapa del procedimiento, acá es donde surge el error… Ese error que no queremos y podría resultar costoso.
Así mismo, la automatización trae ciertas ventajas al delegar el trabajo que se realiza de forma manual a una máquina que lo hace mejor, e invirtiendo el tiempo en escribir código u en otras actividades.
¿Qué podemos automatizar?
Pruebas, deployments, disponibilidad de servicios, backups, procesos de storage, en general cualquier tarea que pueda ser programable.
¿Qué es Jenkins?
Jenkins es open source y probablemente el software de automatización más usado de todos, escrito en Java por ende se ejecuta en JVM. De mucha conveniencia al ser una herramienta extensible al tener un ecosistema de plugins que te permiten extenderlo, se pueden escribir tus propios plugins con Java, la comunidad ha desarrollado gran variedad de los mismos.
Ventajas de utilizar Jenkins
- Extensibilidad (Plugins: Maven, Ansible, SonarQube, Docker y más)
- Comunidad
- Escalabilidad (Horizontal y vertical)
- Innovación constante. (Releases de Seguridad)
- Flexible
- Fácil instalación y configuración
Jenkins va de la mano de DevOps, que no es mas que una cultura que intenta reducir la brecha que existe actualmente entre la parte DEV (desarrolladores) y la parte OPS (operadores y administradores de sistemas), con el fin de realizar el paso a producción.
¿ Qué es continuous Integration y continuous Delivery?
No es más que como entregamos una aplicación a producción de la forma mas automatizada posible (Haciendo un click, push, etc). Jenkins va a encargarse de desplegar la aplicación a producción.
Requerimientos
Minimos
- 256 MB of RAM
- 1 GB of drive space (although 10 GB is a recommended minimum if running Jenkins as a Docker container)
Configuración recomendada para un equipo pequeño
- 1 GB+ of RAM
- 50 GB+ of drive space
– No es mandatorio pero sería lo ideal que para la total comprensión de estos conceptos se tengan nociones o conocimientos en contenedores (Docker).
– Si va a utilizar alguna distribución Fedora, utilice hasta la versión 30, a partir de la 31 cambia un componente del kernel que inhabilita la operación de contenedores, pueden funcionar con unos ajustes a ciertos parámetros del sistema pero no es del alcance del post.
Docker y Fedora 32 https://fedoramagazine.org/docker-and-fedora-32/
Se puede instalar en una máquina física, virtual, proveedor de nube y el sistema operativo de su preferencia. Para mayor información puede consultar las guías que provee el fabricante.
Instalación 1 (Máquina virtual)
Nota: Para la instalación de Jenkins se debe disponer de la versión 8 de java.
apt install openjdk-8-jdk wget gnupg
Ahora se añade el repositorio de Jenkins para la versión estable (LTS).
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > \
/etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get install jenkins
A continuación se procede a validar el estado del servicio
service jenkins status
Instalación 2 (Contenedor Docker)
Para nuestro escenario, se utilizará una máquina Fedora 30 donde se instalará Docker para crear un contenedor del servicio de Jenkins. (Existen diversas implementaciones para este servicio pero esta es una de las mas comunes).
Instalación de Docker
Es muy sencillo, visitamos la web https://developer.fedoraproject.org/tools/docker/docker-installation.html
Configuración del repositorio
yum update
sudo dnf -y install dnf-plugins-core #Instala un paquete para Fedora para administrar repositorios
dnf config-manager \
--add-repo \
https://download.docker.com/linux/fedora/docker-ce.repo
Instalación
sudo dnf install docker-ce -y
sudo systemctl start docker
sudo systemctl status docker
sudo docker run hello-world
Añadir usuario a grupo de docker
docker ps
sudo usermod -aG docker <whoami>
docker ps
Instalación de Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.26.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose
docker-compose --version
Instalación de Jenkins
Nota: La imagen de
jenkinsci/jenkins https://hub.docker.com/r/jenkinsci/jenkins/jenkinsci/jenkins
está deprecada, así que en vez de esa, deberías usar esta:jenkins/jenkins
.
Docker funciona por medio de imágenes, una imagen es una plantilla donde viene la configuración del servicio que queremos.
docker pull jenkinsci/jenkins
docker images
mkdir jenkins
chown 1000 jenkins
Creación de archivo *.yml
cd jenkins
touch docker-compose.yml
version: '3'
services:
jenkins:
container_name: jenkins
image: jenkinsci/jenkins
ports:
- "8080:8080"
volumes:
- $PWD/jenkins_home:/var/jenkins_home
networks:
- net
networks:
- net:
mkdir jenkins_home
docker-compose up -d
docker ps
Opcion 1
docker logs -f jenkins
Opcion 2
cat jenkins_home/secrets/initialAdminPassword
Opcion 3
docker exec -ti jenkins bash
exit
Para detener el contenedor debes entrar a la carpeta de jenkins creada previamente, y ejecutar el siguiente comando.
docker-compose stop
Para eliminar el servicio se utiliza el comando
docker-compose down
Jobs, tareas o proyectos, son los pasos que utilizamos para automatizar nuestras tareas.
Referencias
Docker Compose Installation https://docs.docker.com/compose/install/
Fedora installation https://docs.docker.com/engine/install/fedora/
https://poweruser.blog/how-to-install-docker-on-fedora-32-f2606c6934f1