9. Despliegue continuo

Introducción

Integración continua y despliegue continuo

Integración continua (CI), Entrega continua (CD) y Despliegue Continuo (CD)

Integración, entrega y despliegue continuo. Diferencias y similitudes

Contenedor con Jenkins

Jenkins es lo que se llama un "Servidor de automatización".

Hay abundante documentación sobre él , en los siguientes enlaces:

Jenkins: Página del proyecto.

¿Qué es Jenkins? Explicado en menos de 10 min para quienes no lo conocen de nada

Automatiza las tareas de desarrollo e integración continua con Jenkins

Jenkins: tutorial para esta herramienta de CI

Aunque Jenkins pueda parecer sencillo o superfluo, usar Jenkins es el camino para hacer software de calidad.:

En ejercicios de temas anteriores hemos visto como instalar Jenkins.Ahora vamos a ejecutar un Script desde Jenkins en la máquina real.

root por SSH

Antes que nada debemos permitir que se pueda acceder por SSH como root desde la máquina real. Esto lo vamos a necesitar ya que desde Jenkins vamos a ejecutar "npm run deploy" en la máquina real y para ello necesitamos ser root.

Para permitirlo hay que lanzar las siguientes órdenes:

sudo sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
sudo systemctl restart ssh.service

Despues habrá que cambiar la contraseña a root con la siguiente orden:

sudo passwd root

En un entorno real o sin que haya un cortafuegos delante de la máquina, nunca deberíamos permitir que con root se pueda acceder a la máquina real. Sin embargo lo vamos nosotros a permitir ya que estamos en un entorno educativo.

SSH2 Easy

Otra cosa que necesitamos hacer es instalar y configurar el plugin "SSH2 Easy" para poder acceder por SSH a la máquina real y así lanzar las órdenes en la máquina real.

Instalar en Jenkis el plugin "SSH2 Easy":

En Jenkins pulsa "Administrar Jenkins" , "Administrar Plugins" y "Todos los plugins"

En el campo de búsqueda, escribe "SSH2 Easy"

Marca el plugin "SSH2 Easy" y pulsa "Instalar sin reiniciar"

Espera unos segundos y pulsa en "Volver al inicio de la página"

Configurar el plugin "SSH2 Easy":

Vuelve a "Administrar Jenkins" y pulsa en "Configurar el sistema"

Ves al apartado de "Server Groups Center"

En el apartado "Server Group List" pulsa en Añadir y rellena lo siguiente

Group Name: Máquina Real

Password: La contraseña de root de tu máquina real.

Pulsa en el botón "Guardar" que hay al final de la página.

Vuelve a "Administrar Jenkins" y pulsa en "Configurar el sistema"

Ves al apartado de "Server Groups Center"

En el apartado "Server List" pulsa en Añadir y rellena lo siguiente:

Server Group: Máquina real.

Server Name: maquina-real

Server IP: La IP de la máquina real.

Crear un Job

Vamos ahora a crear una tarea para poder ejecutar un script desde Jenkins en la máquina real.

Pulsa en "Nueva Tarea" , escribe "Tarea de Prueba" , selecciona "Crear un proyecto de estilo libre" y luego pulsa el botón "OK"

Ves al apartado de "Ejecutar" y en el desplegable de "Añadir una acción", selecciona "Remote shell".

El el campo "shell" , escribe las ordenes de Linux que quieres que se ejecuten en la máquina real como root.

Pulsa el botón de "Guardar".

Pulsa en "Construir ahora" y si todo ha ido bien, en tu máquina real se deberá haber ejecutado el Script

Los Script que querremos ejecutar lo normal es que sean los siguientes: cd /carpeta del proyecto git fetch --prune git checkout master git merge --ff-only origin/master npm run deploy

Ejercicios

Ejercicio 1

Ahora vamos a automatizar la ejecución del Script anterior usando Jenkins

Crea un nuevo contenedor de Jenkins de forma que la carpeta /var/jenkins_home se almacene dentro de /opt/tuNombre/docker/jenkins

Instala Jenkins

Instala el plugin de SSH2 Easy sabiendo que la IP es la de la máquina real de Linux de Francia. La contraseña es la misma que la del usuario alumno.

Crea un Job llamado Desplegar que ejecute lo siguiente en la máquina real

cd /opt/tuNombre/ejemplodaw
git fetch --prune --force
git checkout master
git merge --ff-only origin/master
npm run deploy

Ahora haz un cambio en el SASS en master , súbelos a GitHub y ejecuta el Job de Jenkins.Prueba a navegar a http://tuNombre.daw2.pve2.fpmislata.com y se verán los cambios. Ahora haz un cambio en el HTML en master , súbelos a GitHub y ejecuta el Job de Jenkins.Prueba a navegar a http://tuNombre.daw2.pve2.fpmislata.com y se verán los cambios.

Ejercicio 2

Lo último que vamos a hacer para automatizar todo el proceso de despliegue es hacer que cuando haya un cambio en master que se despliegue automáticamente el código.

Para hacerlo deberás:

Investigar como funciona GitHub Actions

Usar Trigger Jenkins Job for GitHub Actions