111 lines
No EOL
4.2 KiB
Text
111 lines
No EOL
4.2 KiB
Text
---
|
|
title: Faire une CI LaTeX avec GitLab
|
|
date: 23 09 2025
|
|
date-modified: last-modified
|
|
engine: knitr
|
|
filters:
|
|
- include-code-files # To handle adding part of file
|
|
---
|
|
|
|
# La CI finale
|
|
|
|
```{bash, echo=FALSE}
|
|
# This code is here to fetch the latest version of the ci
|
|
curl -s "https://forge.inrae.fr/louis.lacoste/csi-louis/-/raw/main/.gitlab-ci.yml?ref_type=heads&inline=true" -o resources/ci-gitlab-latex/gitlab-ci.yaml
|
|
```
|
|
|
|
Voici le contenu d'un de mes fichier `.gitlab-ci.yaml`
|
|
|
|
::: {.callout-important}
|
|
Si vous voyez des incohérences, contactez-moi par mail : [louis.lacoste@agroparistech.fr](mailto:louis.lacoste@agroparistech.fr)
|
|
:::
|
|
|
|
```{yaml}
|
|
#| code: !expr readLines("resources/ci-gitlab-latex/gitlab-ci.yaml")
|
|
```
|
|
|
|
Détaillons ce qu'il s'y passe !
|
|
|
|
# Les variables
|
|
|
|
La section variables ci-dessous sert à définir des variables auxquelles nous ferons référence plus tard.
|
|
|
|
```{yaml}
|
|
#| code: !expr readLines("resources/ci-gitlab-latex/gitlab-ci.yaml")[1:9]
|
|
```
|
|
|
|
- `GIT_VERSION` : spécifie la version de git à utiliser pour l'image Docker que l'on va récupérer.
|
|
- `PDF_BRANCH` : indique le nom de la branche sur laquelle nos PDF seront publiés.
|
|
- `FILE_NAMES` : déclare la liste des noms de fichiers (sans les extensions). Au format yaml donc des chaînes de caractères sans guillemets séparés par des espaces
|
|
|
|
# Les étapes
|
|
## La phase de compilation `build_tex`
|
|
|
|
Nous allons détailler l'étape `build_tex` :
|
|
|
|
```{yaml}
|
|
#| code: !expr readLines("resources/ci-gitlab-latex/gitlab-ci.yaml")[10:36]
|
|
```
|
|
|
|
On déclare tout d'abord le `stage: build` pour qualifier l'étape que l'on réalise ici. Il y en a 3 possibles : `build, test, deploy` ([documentation GitLab](https://docs.gitlab.com/ci/yaml/#stage)).
|
|
Ici nous choisissons `build` puisqu'il s'agit de la compilation de notre projet.
|
|
|
|
À la suite nous chargeons une image docker qui contient les outils `texlive`.
|
|
|
|
Et enfin la directive `script` définit en `bash` l'enchaînement d'étapes que nous réalisons pour compiler le projet.
|
|
|
|
::: {.callout-note title="Exécution conditionnelle de `biber`"}
|
|
|
|
Noter que nous n'avons pas mis d'extensions dans `FILE_NAMES` afin de pouvoir détecter ici les fichiers bcf caractéristiques de la bibliographie.
|
|
|
|
:::
|
|
|
|
Finalement, nous utilisons la directive `after_script` pour afficher dans les journaux de la CI les fichiers de logs des compilations.
|
|
|
|
Enfin `artifacts` spécifie que les artéfacts que l'on veut conserver de la CI sont tous les PDF à la racine du dépôt
|
|
|
|
## La phase de déploiement `deploy`
|
|
|
|
```{yaml}
|
|
#| code: !expr readLines("resources/ci-gitlab-latex/gitlab-ci.yaml")[37:71]
|
|
```
|
|
|
|
Finalement nous déployons nos PDF. Pour cela on charge une image légère `Alpine Linux` avec la version Git sélectionnée dans les variables.
|
|
|
|
Avec la directive `before_script` on clone le dépôt.
|
|
|
|
::: {.callout-important title="Pour créer le token GitLab"}
|
|
Notez dans le `git clone` que nous employons une variable `GITLAB_TOKEN`, celle-ci est a créer au préalable et à déclarer dans le dépôt.
|
|
|
|
Pour cela :
|
|
|
|
1. Rendez-vous dans les paramètre de votre dépôt.
|
|
|
|

|
|
|
|
2. Ici ajoutez un nouveau token.
|
|
|
|

|
|
|
|
3. En configurant les permissions `read_repository` et `write_repository` afin de pouvoir cloner et pousser nos fichiers. Puis cliquer sur "Create project access token".
|
|
|
|

|
|
|
|
4. Votre token est maintenant affiché, copiez le car il ne sera pas raffiché après.
|
|
|
|
5. Rendez-vous maintenant dans CI/CD settings.
|
|
|
|

|
|
|
|
6. Créer maintenant la variable en cliquant sur "Add variable", nommez la `GITLAB_TOKEN`, dans "value" ajoutez le token copié.
|
|
|
|
:::
|
|
|
|
La suite du script déplace les PDF dans le dépôt cloné, crée la branche de publication et ajoute les pdf.
|
|
|
|
Vous avez normalement maintenant une CI de compilation et publication de PDF !
|
|
Maintenant vous pouvez faire référence dans votre `README.md` à vos PDF en saisissant un lien du type :
|
|
|
|
`https://mongitlab.com/monnomutilisateur/mondepot/-/raw/monpdf.pdf`
|
|
|
|
qui permet d'afficher directement dans le navigateur le produit de la compilation. 😄 |