Herramientas de usuario

Herramientas del sitio


clase:daw:daw:2eval:tema09

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.

  • 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 "Desplegar" , 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

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)

  • Pulsa en nuestro nombre de usuario en la parte superior derecha.
  • En el menu lateral, ves a "Configurar".
  • Pulsa en el botón de "Add new Token" y en el botón "Generate"
  • Copia en algún lugar seguro el Token generado
  • Pulsa en el botón "Guardar" que hay al final de la página.

Ves al Job y en "configurar"

  • Ves al apartado "Disparadores de ejecuciones"
  • Marca la opción "Lanzar ejecuciones remotas (ejem: desde 'scripts')"
  • Escribe el Token que habías generado antes.

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

  • 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

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

clase/daw/daw/2eval/tema09.txt · Última modificación: 2021/01/24 08:12 por admin