Mettre en place une CI/CD Gitlab pour ce blog
- 254 words
- 2 min
Dans cet article, je mets en place une simple CI/CD Gitlab pour déployer un site statique généré par zola. En fait c'est l'occasion d'arrêter de déployer ce blog à la main et j'en fait un article 😉.
Configuration de la CI/CD Gitlab
Le gitlab-ci.yml a donc deux stages :
stages:
- build
- deploy
Le stage de Build
build:
stage: build
variables:
GIT_SUBMODULE_STRATEGY: recursive
script:
- apt update && apt install -qy wget
- wget -qO - https://github.com/getzola/zola/releases/download/v0.10.1/zola-v0.10.1-x86_64-unknown-linux-gnu.tar.gz | tar -zxvf -
- zola build
artifacts:
paths:
- public/
Ici j'utilise la variable GIT_SUBMODULE_STRATEGY car mon thème zola est un sous-module git de mon blog ainsi le dépôt est cloné de manière récursive par les runners Gitlab.
Simplement, le binaire zola est récupéré puis le site statique est construit.
Le dossier de build par défaut de zola est le dossier public, d'où la valeur de la variable artifacts.paths.
Stage de déploiement
deploy:
stage: deploy
script:
- apt-get update && apt install -qy openssh-client
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- echo "$SSH_KNOWN_HOSTS" >> ~/.ssh/known_hosts
- ssh user@mywebsite.com "rm -rf /path/to/the/public/directory"
- scp -r public/ user@mywebsite.com:/path/to/the/public/directory
Les variables d'environnement $SSH_PRIVATE_KEY et $SSH_KNOWN_HOSTS doivent être renseignées dans les variables de la CI/CD Gitlab du projet :
Pour obtenir la valeur de la variable $SSH_KNOWN_HOSTS cela peut se faire via la commande ssh-keyscan :
ssh-keyscan mywebsite.com
Ces quelques lignes servent à :
- supprimer le dossier
publichébergeant le site statique actuel - envoyer ce qui résultait du stage précédent, le site statique, vers le serveur hébergeant le site statique.
Un seul stage
C'est peut-être ridicule d'avoir deux stages pour ce blog. Étant donnée la simplicité des tâches, il est préférable de tout faire dans un seul stage.
image: debian:buster-slim
buildanddeploy:
variables:
GIT_SUBMODULE_STRATEGY: recursive
script:
- apt-get update && apt install -qy wget openssh-client
- wget -qO - https://github.com/getzola/zola/releases/download/v$ZOLA_VERSION/zola-v$ZOLA_VERSION-x86_64-unknown-linux-gnu.tar.gz | tar -zxvf -
- ./zola build
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- echo "$SSH_KNOWN_HOSTS" >> ~/.ssh/known_hosts
- ssh blog@zeph.one "rm -rf /home/blog/blog/public"
- scp -r public/ blog@zeph.one:/home/blog/blog/
Une variable est même utilisée pour enregistrer la version de Zola :