Herramientas de usuario

Herramientas del sitio


clase:daw:daw:2eval:tema09

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
clase:daw:daw:2eval:tema09 [2021/01/04 15:55]
admin [Ejecutar Job automáticamente]
clase:daw:daw:2eval:tema09 [2025/02/13 09:33] (actual)
admin [Ejercicio 1]
Línea 7: Línea 7:
   * [[https://devopsti.wordpress.com/2014/09/26/integracion-continua-ci-entrega-continua-cd-y-despliegue-continuo-cd/|Integración continua (CI), Entrega continua (CD) y Despliegue Continuo (CD)]]   * [[https://devopsti.wordpress.com/2014/09/26/integracion-continua-ci-entrega-continua-cd-y-despliegue-continuo-cd/|Integración continua (CI), Entrega continua (CD) y Despliegue Continuo (CD)]]
   * [[https://geeks.ms/jorge/2019/02/25/integracion-entrega-y-despliegue-continuo-diferencias-y-similitudes/|Integración, entrega y despliegue continuo. Diferencias y similitudes]]   * [[https://geeks.ms/jorge/2019/02/25/integracion-entrega-y-despliegue-continuo-diferencias-y-similitudes/|Integración, entrega y despliegue continuo. Diferencias y similitudes]]
 +
 +Es despliegue continuo es desplegar las aplicaciones web lo más pronto posible.
 +
 +Hay varias formas de hacer eso, las 2 que vamos a comentar son:
 +  * [[https://www.jenkins.io/|Jenkins]]
 +  * [[https://github.com/features/actions|GitHub Actions]]
  
  
Línea 24: Línea 30:
 {{:clase:daw:daw:2eval:jenkins-is-the-way.png?100|}} {{:clase:daw:daw:2eval:the_mandalorian.jpg?100|}} {{:clase:daw:daw:2eval:jenkins-is-the-way.png?100|}} {{:clase:daw:daw:2eval:the_mandalorian.jpg?100|}}
  
-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 ===== +===== GitHub Actions ===== 
-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.+GitHub Actions que son acciones que se ejecutan cuando hay algún cambio en el repositorio o que incluso se pueden ejecutar como queramos (Al estilo de Jenkins)
  
-Para permitirlo hay que lanzar las siguientes órdenes: 
  
-  sudo sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config +Para ello en el código fuente del proyecto Java , hay que añadir el fichero ''.github/workflows/desplegar.yml'' con el siguiente contenido:
-  sudo systemctl restart ssh.service+
  
-Despues habrá que cambiar la contraseña a root con la siguiente orden:+<sxh yml> 
 +nameDesplegar
  
-    sudo passwd root 
- 
-<note warning> 
-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. 
-</note> 
- 
-===== 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 
- 
-<note tip> 
-Al hacer añadido el Token puede ejecutar tambien el Job con una URL similar a la siguiente: 
- 
-  http://jenkinslorenzo.daw2.pve2.fpmislata.com/job/Desplegar/build?token=53453453453453acd353453efa34534554 
- 
-</note> 
- 
- 
-<note tip> 
-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 
- 
-</note> 
- 
- 
-===== Ejecutar Job automáticamente ===== 
-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. 
- 
- 
-En Jenkins vamos a creara un API 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: 
- 
-<sxh yml> 
-name: deploy 
 on: on:
 +  workflow_dispatch:
   push:   push:
     branches:     branches:
-      - main+      - master 
 jobs: jobs:
-  build: +  vpn_job:
-    name: desplegar+
     runs-on: ubuntu-latest     runs-on: ubuntu-latest
     steps:     steps:
-    - name: trigger single Job +      - name: Checkout repo 
-      uses: appleboy/jenkins-action@master +        uses: actions/checkout@v3 
-      with: + 
-        url: "URL del servidor de Jenkins" +
-        user: "system_builder" +
-        token: "La API KEY que has generado antes" +
-        job: "Desplegar" +
-</sxh>+
  
-===== Ejercicios =====+      - name: Configurar la VPN 
 +        working-directory: .github/workflows 
 +        run: | 
 +          sudo apt-get update && sudo apt-get install -y openvpn openvpn-systemd-resolved 
 +          echo "${{ secrets.VPN_CA }}" | base64 --decode > ca.crt 
 +          echo "${{ secrets.VPN_USERNAME }}" > credenciales.txt 
 +          echo "${{ secrets.VPN_PASSWORD }}" >> credenciales.txt 
 +          sed -i "s/REPLACE_VPN_IP/${{ secrets.VPN_IP }}/" vpn-pve.conf 
 +          sed -i "s/REPLACE_VPN_PORT/${{ secrets.VPN_PORT }}/" vpn-pve.conf 
  
-==== Ejercicio 1 ==== +      - name: Connect to VPN 
-Ahora vamos a automatizar la ejecución del Script anterior usando Jenkins+        working-directory: .github/workflows       
 +        run: sudo openvpn --config vpn-pve.conf --daemon --log openvpn.log 
  
-  * Crea un nuevo contenedor de Jenkins de forma que la carpeta ''/var/jenkins_home'' se almacene dentro de ''/opt/tuNombre/docker/jenkins'' +      - name: Wait for VPN to establish 
-  * Instala Jenkins +        run: sleep 10
-  * 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 +      name: Test Connection 
-  git fetch --prune --force +        working-directory: .github/workflows 
-  git checkout master +        run: sudo cat openvpn.log 
-  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 <nowiki>http://tuNombre.daw2.pve2.fpmislata.com</nowiki>  y se verán los cambios. +      - nameTest Connection 
-Ahora haz un cambio en el HTML en master , súbelos a GitHub y ejecuta el Job de Jenkins.Prueba a navegar a <nowiki>http://tuNombre.daw2.pve2.fpmislata.com</nowiki>  y se verán los cambios.+        runping -c 2 192.168.59.104
  
-==== Ejercicio ==== +      - name: Run remote script 
-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.+        working-directory: .github/workflows       
 +        env: 
 +          SSH_PRIVATE_KEY: ${{ secrets.SERVER_ID_RSA }} 
 +        run: | 
 +          echo "$SSH_PRIVATE_KEY" > ./id_rsa 
 +          chmod 600 ./id_rsa 
 +          ssh -i ./id_rsa -o StrictHostKeyChecking=no -t ${{ secrets.SERVER_USERNAME }}@192.168.59.104 'sudo rm -rf DesplegarFacturasDocker'         
 +          ssh -i ./id_rsa -o StrictHostKeyChecking=no -t  ${{ secrets.SERVER_USERNAME }}@192.168.59.104 'sudo git clone https://github.com/lgonzalezmislata/DesplegarFacturasDocker.git' 
 +          ssh -i ./id_rsa -o StrictHostKeyChecking=no -t  ${{ secrets.SERVER_USERNAME }}@192.168.59.104 'sudo chmod 777 -R ./DesplegarFacturasDocker' 
 +          ssh -i ./id_rsa -o StrictHostKeyChecking=no -t  ${{ secrets.SERVER_USERNAME }}@192.168.59.104 'cd DesplegarFacturasDocker && sudo ./deploy.sh 2>&1' 
 +</sxh> 
 + 
 +Ahora al hacer cualquier cambio en la rama ''master'' se ejecutará nuestro script de despliegue 
 + 
 +Puedes ver un ejemplo en [[https://github.com/lgonzalezmislata/Facturas/tree/master/.github/workflows]] 
 + 
 +===== Ejercicios =====
  
-Para hacerlo deberás: +===== Ejercicio 1 ===== 
-  * Investigar como funciona GitHub Actions +Añade al repositorio de tu código fuente de Java una acción de //GitHhub Actions// que sea para desplegar.
-  * Usar [[https://github.com/marketplace/actions/trigger-jenkins-job|Trigger Jenkins Job for GitHub Actions]] +
  
 +Se ejecutará:
 +  * Manualmente
 +  * Cuando haya un cambio en ''master''
  
clase/daw/daw/2eval/tema09.1609772142.txt.gz · Última modificación: 2021/01/04 15:55 por admin