đ 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.