Hello,

Ayant récemment changé de pc, je me suis rendu compte que je ne pouvais plus créer d’articles sur mon site statique parce que je n’avais plus l’environnement nécessaire en local pour le déployer.

J’ai donc décidé de m’absoudre de la dépendance de mon environnement en local pour automatiser le déploiement directement sur Gitlab.

Je vous partage donc ma config gitlab pour qu’à chaque fois que je pousse du code sur la branche master, mon site se mette automatiquement à jour.

variables:
    GIT_SUBMODULE_STRATEGY: recursive

build_and_deploy:
    only: 
        - master
    script:
        - docker run --rm -v $(pwd):/src -u $(id -u) klakegg/hugo:0.71.1
        - docker run --rm -v $(pwd):/aws --env AWS_ACCESS_KEY_ID="$AWS_ACCESS_KEY_ID" --env AWS_SECRET_ACCESS_KEY="$AWS_SECRET_ACCESS_KEY" --env AWS_DEFAULT_REGION="$AWS_DEFAULT_REGION" amazon/aws-cli s3 sync ./public $AWS_BUCKET_S3 --delete --exclude "*/"

Configuration

  • Hugo Framework pour générer mon site via l’image Docker de klakegg/hugo.

  • Image Docker officielle d’AWS cli disponible ici pour l’upload sur le bucket S3.

  • Un utilisateur AWS IAM dédié pour ce déploiement avec des accès très restreints.

Fonctionnement

Lorsque je fusionne une branche sur master (et uniquement sur celle là grace à la directive: only: - master), le pipeline se déclenche, la commande hugo génère les fichiers (HTML, CSS et JS) et la commande aws-cli me permet de synchroniser le dossier public sur le bucket S3.

Capture d’écran du résultat

Les variables

  • GIT_SUBMODULE_STRATEGY, me permet d’intaller les sous-modules git (comme les thèmes) de mon site. Voir la documentation ici.

  • Les variables AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY et AWS_DEFAULT_REGION ne sont utilisables que sur les branches protégées (dans mon cas, uniquement master) et sont masquées. Elles n’apparaitront pas dans les logs même si j’essaye de l’afficher manuellement (via un echo par exemple).

Les variables AWS utilisées pour le déploiement

  • La variable AWS_BUCKET_S3 contient le nom du bucket S3.

source: GitLab CI: Deployment & Environments