Adding gitlab ci tutorial
This commit is contained in:
parent
2f4591a5b4
commit
fe6a8a7065
7 changed files with 182 additions and 0 deletions
111
posts/ci-gitlab-latex.qmd
Normal file
111
posts/ci-gitlab-latex.qmd
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
---
|
||||
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. 😄
|
||||
BIN
posts/resources/ci-gitlab-latex/access-token-settings.png
Normal file
BIN
posts/resources/ci-gitlab-latex/access-token-settings.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 43 KiB |
BIN
posts/resources/ci-gitlab-latex/add-new-token.png
Normal file
BIN
posts/resources/ci-gitlab-latex/add-new-token.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 39 KiB |
BIN
posts/resources/ci-gitlab-latex/ci-settings.png
Normal file
BIN
posts/resources/ci-gitlab-latex/ci-settings.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 18 KiB |
71
posts/resources/ci-gitlab-latex/gitlab-ci.yaml
Normal file
71
posts/resources/ci-gitlab-latex/gitlab-ci.yaml
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
variables:
|
||||
# Version de git utilisée
|
||||
GIT_VERSION: v2.30.1
|
||||
|
||||
# Branche cible pour les PDF (modifiable via CI/CD variables)
|
||||
PDF_BRANCH: "pdf"
|
||||
|
||||
FILE_NAMES: 2024-2025-rapport-csi 2024-2025-presentation-csi
|
||||
|
||||
build_tex:
|
||||
stage: build
|
||||
image: registry.gitlab.com/islandoftex/images/texlive:latest
|
||||
script:
|
||||
- |
|
||||
for FILE_NAME in $FILE_NAMES
|
||||
do
|
||||
echo "Compiling ${FILE_NAME}"
|
||||
pdflatex --shell-escape ${FILE_NAME}.tex
|
||||
if test -f ${FILE_NAME}.bcf; then
|
||||
echo "Found ${FILE_NAME}.bcf, running biber"
|
||||
biber ${FILE_NAME}
|
||||
fi
|
||||
pdflatex --shell-escape ${FILE_NAME}.tex
|
||||
done
|
||||
after_script:
|
||||
- |
|
||||
for FILE_NAME in $FILE_NAMES
|
||||
do
|
||||
echo "============================================"
|
||||
cat ${FILE_NAME}.log
|
||||
echo "============================================"
|
||||
done
|
||||
|
||||
artifacts:
|
||||
paths:
|
||||
- "*.pdf"
|
||||
deploy:
|
||||
stage: deploy
|
||||
image:
|
||||
name: alpine/git:${GIT_VERSION}
|
||||
entrypoint: [""]
|
||||
|
||||
before_script:
|
||||
# Clone le repo dans un dossier temporaire
|
||||
- git clone "https://${GITLAB_USERNAME}:${GITLAB_TOKEN}@${CI_SERVER_HOST}/${CI_PROJECT_PATH}.git" "${CI_COMMIT_SHA}"
|
||||
|
||||
# Configure l’identité git
|
||||
- git config --global user.email "${GIT_USER_EMAIL:-$GITLAB_USER_EMAIL}"
|
||||
- git config --global user.name "${GIT_USER_NAME:-$GITLAB_USER_NAME}"
|
||||
|
||||
script:
|
||||
# Déplace les PDFs compilés dans le repo cloné
|
||||
- mv *.pdf "${CI_COMMIT_SHA}/"
|
||||
- cd "${CI_COMMIT_SHA}"
|
||||
|
||||
# Crée une branche orpheline (vierge, sans historique ni fichiers)
|
||||
- git checkout --orphan "${PDF_BRANCH}"
|
||||
- git reset --hard
|
||||
|
||||
# Ajoute uniquement les PDF
|
||||
- git add -f *.pdf
|
||||
|
||||
# Vérifie s’il y a des changements et push
|
||||
- |
|
||||
CHANGES=$(git status --porcelain | wc -l)
|
||||
if [ "$CHANGES" -gt "0" ]; then
|
||||
git commit -m "${COMMIT_MESSAGE:-Updating PDF files}"
|
||||
git push --force origin "${PDF_BRANCH}" -o ci.skip
|
||||
else
|
||||
echo "No PDF changes to commit"
|
||||
fi
|
||||
BIN
posts/resources/ci-gitlab-latex/gitlab-token.png
Normal file
BIN
posts/resources/ci-gitlab-latex/gitlab-token.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 22 KiB |
BIN
posts/resources/ci-gitlab-latex/scope.png
Normal file
BIN
posts/resources/ci-gitlab-latex/scope.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 100 KiB |
Loading…
Add table
Reference in a new issue