Github Actions compilación y deploy automático web con Hugo

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.

title githyub actions hugo

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 generator

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

  1. compila Hugo y crea las paginas estáticas del proyecto en la carpeta public con el contenedor klakegg/actions-hugo@1.0.0,
  2. 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/