Tabla de Contenidos

9. Despliegue continuo

Introducción

Contenedor con Jenkins

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

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

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.

Plugin 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.



Crear un Job

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

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

GitHub Actions

Ahora vamos a ver con configurar Jenkins y GitHub para que al hacer un cambios en "main" se ejecute el Job que despliega la aplicación. Para ello vamos a usar una funcionalidad de GitHub llamada GitHub Actions que son acciones que se ejecutan cuando hay algún cambio en el repositorio.

En Jenkins vamos a creara un Token (Es como una contraseña del usuario)

Ves al Job y en "configurar"

En el código fuente del proyecto , añade el fichero .github/workflows/main.yml con el siguiente contenido:

name: deploy
on:
  push:
    branches:
      - main
jobs:
  build:
    name: desplegar
    runs-on: ubuntu-latest
    steps:
    - name: trigger single Job
      uses: appleboy/jenkins-action@master
      with:
        url: "URL del servidor de Jenkins"
        user: "nombre del usuario de Jenkins"
        token: "El Token que has generado antes"
        job: "nombre del Job a ejecutar"

Ahora al hacer cualquier cambio en la rama main se ejecutará el Job de Jenkins

Ejercicios

Ejercicio 1

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

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

Ahora vamos a automatizar todo el proceso de despliegue de forma que cuando haya un cambio en master que se despliegue automáticamente el código.

Ejercicio 3

Mira lo que son en GitHub los "secrets" en Encrypted secrets

Ahora modifica el fichero .github/workflows/main.yml para que no se vea el Token