Tabla de Contenidos

9. Despliegue continuo

Introducción

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:

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

GitHub Actions

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 ello en el código fuente del proyecto Java , hay que añadir el fichero .github/workflows/desplegar.yml con el siguiente contenido:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
name: Desplegar
 
on:
  workflow_dispatch:
  push:
    branches:
      - master
 
jobs:
  vpn_job:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repo
        uses: actions/checkout@v3
  
 
      - 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
 
      - name: Connect to VPN
        working-directory: .github/workflows     
        run: sudo openvpn --config vpn-pve.conf --daemon --log openvpn.log
 
      - name: Wait for VPN to establish
        run: sleep 10
 
      - name: Test Connection
        working-directory: .github/workflows
        run: sudo cat openvpn.log
 
      - name: Test Connection
        run: ping -c 2 192.168.59.104
 
      - name: Run remote script
        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'

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

Ejercicio 1

Añade al repositorio de tu código fuente de Java una acción de GitHhub Actions que sea para desplegar.

Se ejecutará: