Je pense avoir résolu tous les soucis pour un site “très simple”.
J’espère que ce qui suit servira/aidera/inspirera d’autres.
Organisation des fichiers
Sortie
Il est nécessaire d’indiquer dans pelicanconf.py
l’export des fichiers dans le répertoire attendu par Pages:
OUTPUT_PATH = 'public/'
Plugins
J’ai personnellement utilisé un mix de répertoires locaux et de paquets Python.
Les gros plugins Pelican sont packagés dans Pypi et sont faciles à installer avec pip (cf. exemple plus loin le fichier .gitlab-ci.yml
). Ici, j’ai activé render_math
– installé par pip
– mais j’ai une version personnelle de events
sous suivi de version dans le répertoire pelican-plugins/events
(j’ai modifié le plugin).
On peut certainement exploiter les submodules de Git, mais je n’ai pas étudié leurs interactions avec la chaîne CI/CD de GitLab.
PLUGIN_PATHS = ['pelican-plugins']
PLUGINS = ['events', 'render_math']
Thème
Ayant eu à l’adapter, j’ai choisi de déployer une copie locale du thème nest
dans le répertoire (sous Git) themes
:
THEME = "themes/nest"
Configuration Pelican
Rien de particulier…
Configuration CI/CD pour PLMlab
J’ai eu pas mal de soucis, et je remercie les personnes sur le Mattermost PLM pour leur aide.
Image à utiliser
L’image Python n’est pas utilisable actuellement. Après plusieurs essais, j’ai choisi d’installer Python dans la dernière Alpine.
Il est nécessaire d’être explicite sur l’image du conteneur PLM:
image: registry.plmlab.math.cnrs.fr/docker-images/alpine/edge:base
Les tags
(ici base
) utilisables sont listés dans chacune des images (ici alpine/edge
) produites dans la section Container Registry
du dépôt docker-images
de la PLM…
Exemple pour Alpine Edge : lien direct
Déployer Python
Il va falloir installer Python et les dépendances, les lignes de scripts “qui font tout” :
script:
- export PYTHONUNBUFFERED=1
- apk add --update --no-cache python3
- ln -sf python3 /usr/bin/python
- python3 -m ensurepip
- pip3 install --no-cache --upgrade pip setuptools
- pip3 install -r requirements.txt
La variable exportée permet de pouvoir avoir un listing complet des commandes Python dans la console de suivi des pipeline GitLab, le reste est plutôt évident.
Je suppose ici que la racine de votre dépôt contient un fichier requirements.txt
. Le mien pour l’exemple:
beautifulsoup4
Jinja2
Markdown
pelican
typogrify
pelican-render-math
icalendar
pelican-render-math
permet d’installer ce plugin directement par pip, icalendar
est une dépendance de events
. On peut réduire le fichier à juste pelican
et Markdown
pour un site sans plugin.
Reconstruction du site à chaque commit
Je ne maitrise clairement pas les outils CI/CD de GitLab, j’ai dû décrire l’installation et la compilation du site dans la même tâche. Mais ça fonctionne ! Voilà le fichier .gitlab-ci.yml
final:
image: registry.plmlab.math.cnrs.fr/docker-images/alpine/edge:base
site:
stage: build
script:
- export PYTHONUNBUFFERED=1
- apk add --update --no-cache python3
- ln -sf python3 /usr/bin/python
- python3 -m ensurepip
- pip3 install --no-cache --upgrade pip setuptools
- pip3 install -r requirements.txt
- pelican content -s publishconf.py
artifacts:
paths:
- public
pages:
stage: deploy
needs: [site]
script:
- echo 'Nothing to do...'
artifacts:
paths:
- public
only:
- master
Références
Je reste évidemment disponible (ici ou sur le Mattermost) si certains points ne sont pas assez clairs.