đ DĂ©ploiement Blog Hugo
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 :
- Un repository gitlab distant avec mon code.
- Une intĂ©gration continue gitlab qui gĂ©nĂšre une archive du site : voir ici, mais qui n’est pas dĂ©ployĂ©
- Un script local sur mon serveur me permettant de dĂ©ployer mon site sans difficultĂ© en modifiant le contenu d’un rĂ©pertoire prĂ©sentĂ© par mon serveur web
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.
- Optionel: Régénération du pipeline à intervalles réguliers, pour gérer les articles futurs ou expirés.
- Ajout d’un webhook Pipeline events dans Gitlab.
- Installation d’un serveur webhook pour rĂ©pondre aux hooks Gitlab et lance le script bash ci-dessus.
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 :
- EmpĂȘcher au maximum la possibilitĂ© d’Ă©diter le script.
- Donner juste assez de droits pour que l’utilisateur du script soit en capacitĂ© de le lancer sans pouvoir modifier d’autres choses.
- Gérer https pour ne pas faire transiter le token en clair.
Voilà si vous avez fait tout ça bien, vous pouvez pousser votre code sur Gitlab et tada, automatiquement, il sera mis à jour.