====== 9. Despliegue continuo ====== ===== Introducción ===== * [[https://blog.develat.io/pipelines-ci-cd/|Integración continua y despliegue continuo]] * [[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]] 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]] ===== Contenedor con Jenkins ===== Jenkins es lo que se llama un "Servidor de automatización". {{:clase:daw:daw:2eval:jenkins_logo.png?200|}} Hay abundante documentación sobre él , en los siguientes enlaces: * [[https://www.jenkins.io/|Jenkins]]: Página del proyecto. * [[https://www.javiergarzas.com/2014/05/jenkins.html|¿Qué es Jenkins? Explicado en menos de 10 min para quienes no lo conocen de nada]] * [[https://www.arsys.es/blog/programacion/jenkins-cloud-integracion-continua/|Automatiza las tareas de desarrollo e integración continua con Jenkins]] * [[https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/jenkins-tutorial/|Jenkins: tutorial para esta herramienta de CI]] Aunque Jenkins pueda parecer sencillo o superfluo, usar Jenkins //**es el camino**// para hacer software de calidad.: {{:clase:daw:daw:2eval:jenkins-is-the-way.png?100|}} {{:clase:daw:daw:2eval:the_mandalorian.jpg?100|}} ===== 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: 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á: * Manualmente * Cuando haya un cambio en ''master''