Introduction

Pour un nouveau projet de blog, j’ai choisi HUGO (https://gohugo.io/) avec un nom de domaine pris sur OVH, incluant gratuitement un petit espace d’hébergement, mais suffisant pour ne publier que du HTML/CSS.

Ici nous allons voir, non pas comment se servir d’HUGO, mais uniquement comment déployer le projet automatiquement sur un hébergement qui n’offre qu’un accès en FTP.

Déploiement automatique sur un FTP

On va faire simple, j’ai mon projet GIT sur une instance GITLAB et lorsque je push sur master la pipeline se déclenche pour compiler et déployer sur le FTP.

Nous allons donc créer un fichier .gitlab-ci.yml à la racine du dépôt, comme ceci :

image: hugomods/hugo:latest

variables:
  GIT_SUBMODULE_STRATEGY: recursive

stages:
  - build
  - deploy

build:
  stage: build
  script:
    - mkdir -p public
    - hugo
  artifacts:
    paths:
      - public/
  only:
    variables:
      - $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH

deploy:
  stage: deploy
  script:
    - apk update
    - apk add lftp
    - lftp -e "set ftp:ssl-allow no; open $FTP_HOST; user $FTP_USERNAME $FTP_PASSWORD; mirror -X .*/ --reverse --verbose public/ www/; bye"
  only:
    variables:
      - $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH

Quelques explications :

  • image: hugomods/hugo:latest : l’image docker que nous allons utiliser
  • GIT_SUBMODULE_STRATEGY: recursive : permet de télécharger les thèmes associés
  • $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH : permet de déclencher la pipeline uniquement sur la branche principal
  • apk add lftp : comme on est sur une alpine, on télécharge lftp avec apk
  • lftp -e "set ftp:ssl-allow no; open $FTP_HOST; user $FTP_USERNAME $FTP_PASSWORD; mirror -X .*/ --reverse --verbose public/ www/; bye" : c’est ici que tout se passe, on va synchroniser le répertoire de build avec notre FTP distant.

Le script est à adapter selon votre besoin mais il fonctionne en l’état.

N’oubliez pas d’ajouter les variables $FTP_HOST, $FTP_USERNAME et $FTP_PASSWORD avec leurs valeurs dans GITLAB, au niveau du projet (Settings > CI/CD > Variables).

A bientôt, et bon déploiement !

Sources :

https://docs.gitlab.com/tutorials/hugo/

https://hub.docker.com/r/hugomods/hugo/tags?name=latest

https://dev.to/costalfy/utilisez-gitlab-com-pour-deployer-automatiquement-votre-site-web-hugo-37k5