Publication d'un site Hugo via Gitlab-CI sur un hébergement web OVH gratuit

Sommaire

L'objectif de cet article est de publier un site statique généré via Hugo, sur un hébergement OVH gratuit situé en Europe, de manière automatique via Gitlab-CI.

1. Prérequis

  • Un projet Gitlab avec un dépôt Git contenant le code de votre site Hugo (sur gitlab.com ou sur un serveur on-premise connecté à un Gitlab Runner disposant d'un accès SFTP vers OVH)
  • Un hébergement gratuit chez OVH
  • Un site généré via Hugo

2. Configuration OVH

Se connecter sur son profil OVH et aller dans la partie "Hébergement" de votre nom de domaine.

Aller dans l'onglet "FTP-SSH" et configuer le compte de connexion :

  • Ajouter un mot de passe
  • Activer le SFTP
  • Activer le compte

Noter les informations suivantes pour la suite de cet article :

  • Login
  • Mot de passe
  • Nom FQDN du Serveur FTP et SFTP
  • Dossier racine de votre domaine (récupéré dans l'onglet "Multisite" de votre hébergement)

Il vous faudra aussi récupérer la valeur de l'empreinte du serveur SFTP, que vous pouvez obtenir via la commande "ssh-keyscan" (remplacer le nom du cluster sur lequel votre espace OVH est hébergé):

1ssh-keyscan ftp.clusterXXX.hosting.ovh.net

3. Préparation du projet Gitlab

Dans un premier temps, créer des variables d'environnement dans notre projet Gitlab et renseigner les informations obtenues précédemment :

  • REMOTE_SFTP_URL : URL du serveur SFTP OVH (exemple : sftp://ftp.cluster021.hosting.ovh.net)
  • SFTP_USER : Login du compte SFTP OVH
  • SFTP_PASSWORD : Mot de passe du compte SFTP OVH
  • SFTP_SERVER_FINGERPRINT : Empreinte du serveur SFTP (vous pouvez la récupérer via la commande "ssh-keyscan")
  • REMOTE_STAGE_FOLDER : Chemin absolu du dossier racine sur le serveur SFTP (exemple: ~/website)

Pour cela, se diriger dans le menu "Settings > CI/CD > Variables" de votre projet (https://url-du-projet-gitlab/-/settings/ci_cd) et créer les variables avec les paramètres suivants :

  • REMOTE_SFTP_URL : Expanded
  • SFTP_USER : Protected, Expanded
  • SFTP_PASSWORD : Protected, Masked, Expanded
  • SFTP_SERVER_FINGERPRINT : Expanded
  • REMOTE_STAGE_FOLDER : Expanded

4. Créer le fichier gitlab-ci.yml

Ajouter un fichier .gitlab-ci.yml à la racine de votre dépôt Git avec le contenu suivant :

 1image: registry.gitlab.com/pages/hugo/hugo_extended:latest
 2
 3variables:
 4  GIT_SUBMODULE_STRATEGY: recursive
 5
 6stages:
 7  - build
 8  - deploy
 9
10build:
11  stage: build
12  script:
13    - hugo --minify
14  artifacts:
15    paths:
16      - public
17  rules:
18    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
19
20deploy:
21  stage: deploy
22  before_script:
23    - apk add openssh
24    - apk add --no-cache lftp
25  script:
26    - mkdir ~/.ssh
27    - echo "$SFTP_SERVER_FINGERPRINT" > ~/.ssh/known_hosts
28    - lftp -e "mirror --verbose --delete --transfer-all --parallel=4 --reverse public/ $REMOTE_STAGE_FOLDER; quit" -u $SFTP_USER,$SFTP_PASSWORD $REMOTE_SFTP_URL
29  rules:
30    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH

Liens