Gitlab Pages, intégration continue & python 3

Par Jean-Baptiste, le 21/07/2017

application, entreprise, gitlab, pelican, python 3

Introduction

Voici les étapes pour le déploiement de notre site via l'outil CI intégré de gitlab, j'ai nommé Gitlab Pages.

Activer l'intégration continue

Configurer votre projet pour utiliser l'intégration continue

Ajouter un fichier .gitlab-ci.yml. Vous pouvez en générer un depuis un modèle directement depuis l'interface.

Attention celui généré pour pelican contient un "image: python2.7-alpine". Cette option n'est utile que si votre instance de Gitlab est configurée pour utiliser Docker. Ce qui n'est pas le cas chez nous pour le moment. Mais ça va venir rapidement.

Si vous n'utilisez pas Docker sur votre instance de Gitlab comme nous, vous devez installer python 3 "en dur" si votre pelican utilise python 3.

Vous devez aussi installer sur le serveur toutes les dépendances de votre projet, le "runner" de gitlab n'ayant pas les droits pour installer les dépendances python sur la machine.

Push

Nous hébergeons notre site sur un autre serveur que celui de notre instance Gitlab. Nous utilisons donc la commande pelican: make rsync_upload pour construire le site et l'envoyer via rsync & ssh sur l'autre serveur.

Nous avons donc généré une clef ssh pour l'utilisateur gitlab-runner (sous Ubuntu):

sudo su gitlab-runner
ssh-keygen

que nous avons copiée sur le serveur servant le site (derrière nginx compilé avec le module pagespeed). Ne pas oublier d'ouvrir les ports nécessaires sur les firewall, et tout roule ! A chaque commit & push sur la branche master le site est reconstruit et poussé sur le bon serveur.

Le fichier de configuration de l'intégration continue est donc minimal:

stages:
  - build
  - upload

build:
  stage: build
  script:
    - make publish
  only:
    - master

upload:
  stage: upload
  script:
    - make rsync_upload
  only:
    - master

Le "stage" nommé "pages" est réservé par gitlab et déclenche une copie en locale pour être servi par le nom de domaine des pages statiques Gitlab.

J'ai donc ajouté manuellement les 2 étapes (la dernière aurait suffit car le Makefile régénère le site avant upload).


Jean-Baptiste