Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
clase:daw:daw:2eval:tema09 [2021/01/04 16:15] admin [Ejercicios] |
clase:daw:daw:2eval:tema09 [2025/02/13 09:33] (actual) admin [Ejercicio 1] |
||
---|---|---|---|
Línea 7: | Línea 7: | ||
* [[https:// | * [[https:// | ||
* [[https:// | * [[https:// | ||
+ | |||
+ | 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:// | ||
+ | * [[https:// | ||
Línea 23: | Línea 29: | ||
{{: | {{: | ||
- | |||
- | En ejercicios de temas anteriores hemos visto como instalar Jenkins.Ahora vamos a ejecutar un Script desde Jenkins | ||
- | |||
- | ===== 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" | ||
- | |||
- | Para permitirlo hay que lanzar las siguientes órdenes: | ||
- | |||
- | sudo sed -i ' | ||
- | sudo systemctl restart ssh.service | ||
- | |||
- | Despues habrá que cambiar la contraseña a root con la siguiente orden: | ||
- | |||
- | 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. | ||
- | </ | ||
- | |||
- | ===== 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 " | ||
- | * En el campo de búsqueda, escribe "SSH2 Easy" | ||
- | * Marca el plugin "SSH2 Easy" y pulsa " | ||
- | * Espera unos segundos y pulsa en " | ||
- | \\ | ||
- | \\ | ||
- | |||
- | |||
- | * Configurar el plugin "SSH2 Easy": | ||
- | * Vuelve a " | ||
- | * Ves al apartado de " | ||
- | * En el apartado " | ||
- | * Group Name: Máquina Real | ||
- | * Password: La contraseña de root de tu máquina real. | ||
- | * Pulsa en el botón " | ||
- | * Vuelve a " | ||
- | * Ves al apartado de " | ||
- | * En el apartado " | ||
- | * 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 " | ||
- | * Ves al apartado de " | ||
- | * El el campo " | ||
- | * Pulsa el botón de " | ||
- | * Pulsa en " | ||
- | |||
- | <note tip> | ||
- | Al hacer añadido el Token puede ejecutar tambien el Job con una URL similar a la siguiente: | ||
- | |||
- | http:// | ||
- | |||
- | </ | ||
- | |||
- | |||
- | <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/ | ||
- | npm run deploy | ||
- | |||
- | </ | ||
===== GitHub Actions ===== | ===== GitHub Actions ===== | ||
- | Ahora vamos a ver con configurar Jenkins y GitHub para que al hacer un cambios en " | + | 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) | + | Para ello en el código fuente del proyecto Java , hay que añadir el fichero '' |
- | * Pulsa en nuestro nombre de usuario en la parte superior derecha. | + | |
- | * En el menu lateral, ves a " | + | |
- | * Pulsa en el botón de "Add new Token" y en el botón " | + | |
- | * Copia en algún lugar seguro el Token generado | + | |
- | * Pulsa en el botón " | + | |
- | Ves al Job y en " | + | <sxh yml> |
- | * Ves al apartado " | + | name: Desplegar |
- | * Marca la opción " | + | |
- | * Escribe el Token que habías generado antes. | + | |
- | En el código fuente del proyecto , añade el fichero '' | ||
- | |||
- | <sxh yml> | ||
- | name: deploy | ||
on: | on: | ||
+ | workflow_dispatch: | ||
push: | push: | ||
branches: | branches: | ||
- | - main | + | - master |
jobs: | jobs: | ||
- | | + | |
- | name: desplegar | + | |
runs-on: ubuntu-latest | runs-on: ubuntu-latest | ||
steps: | steps: | ||
- | | + | |
- | uses: appleboy/jenkins-action@master | + | uses: actions/checkout@v3 |
- | | + | |
- | url: "URL del servidor de Jenkins" | + | |
- | user: " | + | |
- | token: "El Token que has generado antes" | + | |
- | job: " | + | |
- | </ | + | |
- | Ahora al hacer cualquier cambio en la rama '' | + | - name: Configurar |
- | ===== Ejercicios ===== | + | |
+ | 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 " | ||
+ | sed -i " | ||
- | ==== Ejercicio 1 ==== | + | - name: Connect to VPN |
- | Ahora vamos a automatizar la ejecución del Script anterior usando Jenkins | + | |
+ | run: sudo openvpn --config vpn-pve.conf --daemon --log openvpn.log | ||
- | * Crea un nuevo contenedor de Jenkins de forma que la carpeta ''/ | + | - 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 '' | + | |
- | * Crea un Job llamado '' | + | |
- | cd / | + | |
- | git fetch --prune --force | + | |
- | git checkout master | + | run: sudo cat openvpn.log |
- | git merge --ff-only origin/master | + | |
- | | + | |
- | Ahora haz un cambio en el SASS en master , súbelos a GitHub y ejecuta el Job de Jenkins.Prueba a navegar a < | + | - name: Test Connection |
- | Ahora haz un cambio en el HTML en master , súbelos a GitHub y ejecuta el Job de Jenkins.Prueba a navegar a < | + | run: ping -c 2 192.168.59.104 |
- | ==== Ejercicio | + | - name: Run remote script |
- | 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. | + | working-directory: |
+ | env: | ||
+ | SSH_PRIVATE_KEY: | ||
+ | run: | | ||
+ | echo " | ||
+ | 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:// | ||
+ | ssh -i ./id_rsa -o StrictHostKeyChecking=no -t ${{ secrets.SERVER_USERNAME }}@192.168.59.104 'sudo chmod 777 -R ./ | ||
+ | ssh -i ./id_rsa -o StrictHostKeyChecking=no -t ${{ secrets.SERVER_USERNAME }}@192.168.59.104 'cd DesplegarFacturasDocker && sudo ./ | ||
+ | </ | ||
+ | Ahora al hacer cualquier cambio en la rama '' | ||
+ | |||
+ | Puedes ver un ejemplo en [[https:// | ||
+ | |||
+ | ===== Ejercicios ===== | ||
- | ==== Ejercicio | + | ===== Ejercicio |
- | Mira lo que son en GitHub los " | + | Añade al repositorio de tu código fuente de Java una acción de //GitHhub Actions// que sea para desplegar. |
- | Ahora modifica el fichero | + | Se ejecutará: |
+ | * Manualmente | ||
+ | * Cuando haya un cambio en '' | ||