Por Manolo Gómez | April 20, 2022
Las github actions es una de las herramientas mas interesantes para programadores, disponer de procesos que se ejecutan automáticamente cada vez que subimos nuestro cambios, nos dan un millón posibilidades.
En un post anterior explique que uso Hubo como alternativa a Wordpress, para crear esta pagina web, es un gestor de contenidos, que trabaja en local y cuando se crea nuevo contenido hay recompilar para generar las nuevas paginas, es decir, se crean todas las paginas estáticas y luego se suben al hosting. Este es un claro ejemplo en el que github action es perfecto.
Alternativa wordpress, hugo static web site generatorEn un proceso manual yo tengo que ejecutar hugo –minify, para que crear las paginas estáticas en la carpeta /public y después mediante algún cliente ftp o similar subir las paginas, esto cada vez que introduzco un cambio o corrección en la web.
En este caso la Github action va a ejecutar los siguiente:
- compila Hugo y crea las paginas estáticas del proyecto en la carpeta public con el contenedor klakegg/actions-hugo@1.0.0,
- con rsync sube las nuevas paginas al servidor, previo a ver cargado las claves publico privadas correspondientes.
El proceso es el siguiente
en el servido
Prepara las key para la conexión al servidor mediante ssh
Comprobar si tenemos claves publico-privadas
ls -al ~/.ssh
Deben de aparecer archivos del tipo id_rsa.pub, id_ecdsa.pub, id_ed25519.pub
De no ser asi debemos de crearlas si existe saltar esta paso
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
add key public to authorized_keys
cd ~/.ssh/
cat id_rsa.pub >> authorized_keys
Crear el archivo dentro de nuestro repositorio llamado ** .github/workflows/deploy.yaml ** con el siguiente contenido
name: Build and Deploy
on:
push:
branches:
- master
jobs:
build:
name: Build and Deploy
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: hugo
uses: klakegg/actions-hugo@1.0.0
- name: Install SSH Key
uses: shimataro/ssh-key-action@v2
with:
key: ${{ secrets.SSH_KEY }}
known_hosts: 'just-a-placeholder-so-we-dont-get-errors'
- name: Adding Known Hosts
run: ssh-keyscan -H ${{ secrets.IP_SERVER }} >> ~/.ssh/known_hosts
- name: Copy to webserver
run: rsync --delete -rvzh ./public ${{ secrets.USER_NAME }}@${{ secrets.IP_SERVER }}:/var/www/mi.es/public
introduciremos las claves los secretos en nuestro repositorio de github
setting/secrets -> new repository secrets
USER_NAME = usuario
IP_SERVER = XX.xx.xx.xx
SSH_KEY -> cat ~/.ssh/id_rsa
Con esto el proceso esta automatizado con hacer git push de los cambios la web se actualiza automáticamente.
fuentes:
https://www.yellowduck.be/posts/deploy-hugo-site-with-github-actions/ https://zellwk.com/blog/github-actions-deploy/