Personnaliser une image Docker de NixOS pour de l'intégration continue
Voir aussi : vidéo youtube - dépôt git
Dans un projet git, l’intégration continue permet de construire/tester/déployer automatiquement le projet lors des modifications du code. Pour cela, on utilise généralement une image Docker (Ubuntu, Debian, NixOS…) que l’on met à jour en fonction du projet. Cette mise à jour peut parfois prendre du temps. Ce tutoriel montre comment construire et utiliser une image Docker personnalisée.
Packager un document Latex/Beamer
dépôt git d’exemple : https://gitlab.com/nokomprendo/beam
écrire un fichier de packaging
default.nix
:with import <nixpkgs> {}; { stdenv.mkDerivation name = "beam"; src = ./.; buildInputs = [ texlive.combined.scheme-full ]; buildPhase = "latexmk -xelatex -shell-escape main"; installPhase = '' mkdir -p $out/public cp main.pdf $out/public/ ''; }
tester la compilation en local :
nix-build evince result/public/main.pdf
Compiler avec Gitlab-CI
écrire un fichier d’intégration continue
.gitlab-ci.yml
:image: nixos/nix build: script: - nix-build - cp -r result/public . artifacts: paths: - public
ajouter le fichier au dépôt avec les commandes classiques (
git add/commit/push
)inconvénient : à chaque mise à jour, une image Docker générique
nixos/nix
est chargée puis tous les paquets Latex sont installés (ce qui prend environ 30 minutes)
Construire et utiliser une image Docker personnalisée
Configuration de Docker
activer Docker dans le fichier
/etc/nixos/configuration.nix
:true; virtualisation.docker.enable =
mettre à jour le système :
sudo nixos-rebuild switch
ajouter le groupe
docker
à l’utilisateur (et se reconnecter) :sudo usermod -aG docker nokomprendo
Créer une image Docker
écrire un
Dockerfile
:FROM nixos/nix MAINTAINER nokomprendo <nokomprendo@gmail.com> RUN nix-env -iA nixpkgs.texlive.combined.scheme-full
construire l’image Docker (environ 45 minutes) :
docker build -t nokomprendo/nixostex:latest .
Uploader sur Docker Hub
créer un compte sur https://hub.docker.com puis créer un dépôt Docker
uploader l’image Docker (environ 1 Go) :
docker login docker push nokomprendo/nixostex docker logout
Utilisation dans Gitlab-CI
spécifier l’image
nokomprendo/niostex
dans le fichier.gitlab-ci.yml
mettre à jour le dépôt git et relancer l’intégration continue (environ 5 minutes)