📘 DĂ©ploiement Blog Hugo

| ~ 2 mins | 404 mots

Article original du 2023-05-06 :

Pour dĂ©ployer facilement mon blog avec hugo en auto-hĂ©bergĂ© tout en gardant le code sur gitlab, j’utilise la mĂ©thode suivante :

Voici ainsi le type de script que j’ai ainsi utilisĂ©, le principe est de rĂ©cupĂ©rer le dernier artefact de gitlab et ensuite de le dĂ©ployer dans le dossier /var/www/public :

#!/bin/bash

# CONFIG
ARCHIVE_PATH="/tmp/artifacts.zip"
PROJECT_NUMBER="YOURPROJECTNUMBER"
DEST_PATH="/var/www/"
GITLAB_ACCESS_TOKEN="YOURTOKEN"
GITLAB_INSTANCE="YOURINSTANCE"
BRANCH="YOUR BRANCHE"
JOB_NAME="pages"

# DEPLOY
set -e
curl --location --header "PRIVATE-TOKEN: $GITLAB_ACCESS_TOKEN" "https://$GITLAB_INSTANCE/api/v4/projects/$PROJECT_NUMBER/jobs/artifacts/$BRANCH/download?job=$JOB_NAME" --output "$ARCHIVE_PATH"
sudo rm -R "$DEST_PATH/public"
sudo unzip "$ARCHIVE_PATH" -d "$DEST_PATH"
sudo chown -R www-data:www-data "$DEST_PATH/public"
rm "$ARCHIVE_PATH"

Il suffit alors d’attendre que la CI passe et soit validĂ© cĂŽtĂ© gitlab pour pouvoir appliquer le script. 😀

Mise Ă  jour 2023-08-25 : J’ai amĂ©liorĂ© le mĂ©canisme pour le rendre automatique. Voici comment faire : 

On peut aller plus loin et rendre le systĂšme automatique.

Voici un exemple naif de configuration du serveur webhook :

[
  {
    "id": "blog_update",
    "execute-command": "/home/me/monscript.sh",
    "command-working-directory": "/home/me",
    "response-message": "redeploy blog",
    "trigger-rule": {
      "and": [
        {
          "match": {
            "type": "value",
            "value": "DONOTLEAKTHIS",
            "parameter": {
              "source": "header",
              "name": "X-Gitlab-Token"
            }
          }
        },
        {
          "match": {
            "type": "value",
            "value": "Pipeline Hook",
            "parameter": {
              "source": "header",
              "name": "X-Gitlab-Event"
            }
          }
        },
        {
          "match": {
            "type": "value",
            "value": "success",
            "parameter": {
              "source": "payload",
              "name": "builds.0.status"
            }
          }
        }
      ]
    }
  }
]

Des ajustements sont nĂ©cessaires pour gĂ©rer ça correctement et de façon sĂ©curisĂ©e. En effet, l’utilisation d’un webhook est potentiellement dangereux, il pourrait rendre possible Ă  un tier d’exĂ©cuter du code non voulu, il faut donc :

Voilà si vous avez fait tout ça bien, vous pouvez pousser votre code sur Gitlab et tada, automatiquement, il sera mis à jour.