Abe Estrada

Hugo en GitLab

Hace unos días cambié de “host” para mi blog, ahora el blog esta hospedado en GitLab haciendo uso de su servicio “GitLab Pages” que permite hospedar páginas estáticas, en mi caso, un blog generado por Hugo.

GitLab Pages funciona ejecutando un script por una instancia llamada runner que devuelve los archivos generados llamados artifacts y GitLab publica los archivos.

La configuración que necesita GitLab para ejecutar el script es muy sencilla, solo se necesita agregar un archivo llamado .gitlab-ci.yml y después de casa cambio en el código que subamos, GitLab va a ejecutar el contenido del archivo .gitlab-ci.yml. En mi caso, estoy utilizando el siguiente script:

.gitlab-ci.yml

image: alpine

before_script:
  - apk update && apk add openssl python py2-pip
  - pip install --upgrade pip
  - pip install pygments
  - wget https://github.com/spf13/hugo/releases/download/v0.18/hugo_0.18_Linux-64bit.tar.gz
  - echo "934c3ee6001b502497e1ee9f5055248d  hugo_0.18_Linux-64bit.tar.gz" | md5sum -c
  - tar xf hugo_0.18_Linux-64bit.tar.gz && cp ./hugo_0.18_linux_amd64/hugo_0.18_linux_amd64 /usr/bin/hugo
  - hugo version

pages:
  script:
  - hugo
  artifacts:
    paths:
    - public
  only:
  - master

El funcionamiento es muy parecido a un archivo de Docker docker-compose.yml, con ciertos cambios específicos para GitLab, en mi caso estoy utilizando la imágen alpine que es una distro de Linux muy pequeña en la que se instala openssl, python y py-pip, luego pip instala pygments y se descarga la versión 0.17 de hugo y se verifica la integridad del archivo, luego se descomprime el archivo .tar.gz con el binaro de hugo. Una vez hecho todo esto, se ejecuta el comando hugo dentro de pages para generar los archivos y GitLab lee todo lo que se haya generado dentro del folder public solamente de la rama master.

En pocas palabras lo que hace es descargar una distro de Linux dentro de un contenedor de Docker y ejecutar los comandos establecidos, luego copia el contenido del directorio a otro servidor donde los archivos son públicos. Por este motivo sigo utilizando Hugo como el generador de estos archivos, ya que me ha dado la facilidad de mover todo el contenido de mi blog para probar diferentes “hosts” como Amazon S3 con Couldfront, Firebase y ahora GitLab Pages.

En el grupo de GitLab Pages se pueden ver diferentes repositorios para diferentes generadores de páginas estáticas, incluso la configuración para publicar los archivos dentro de un folder, sin ejecutar ningún script (”plain html”).