forked from quentin/quentin.dufour.io
3 KiB
3 KiB
layout | title | date | status | sitemap | category | description |
---|---|---|---|---|---|---|
post | Automatiser la publication des artefacts | 2023-04-17T07:45:22.402+02:00 | draft | true | developpement | Nous avons précédémment défini un workflow de publication d'artefacts, maintenant on va chercher à l'automatiser un peu |
Cet article fait suite aux 3 articles précédents :
- Un registre statique Docker avec Garage
- Construire et publier des conteneurs sans daemon Docker
- Spécifier un registre d'artefacts et l'intégrer dans un site web
Mainteant qu'on comprend mieux le problème, on aimerait définir un outil pour nous faciliter la vie à la publication. Il sera indépendant (standalone) mais développé au sein du dépôt albatros car il est prévu pour être utilisé de pair. Dans ce billet, son nom de code est alba
.
Commençons par les entrées de notre programme : un ensemble de fichiers qui doit être généré par nos outils Nix :
# static
nix build .#packages.x86_64-linux.albatros -o publish/static/linux/amd64/albatros
nix build .#packages.i686-linux.albatros -o publish/static/linux/386/albatros
nix build .#packages.aarch64-linux.albatros -o publish/static/linux/arm64/albatros
nix build .#packages.armv6l-linux.albatros -o publish/static/linux/arm/albatros
# docker
nix build .#packages.x86_64-linux.docker.albatros -o publish/docker/linux/amd64/image.tar.gz
nix build .#packages.armv6l-linux.docker.albatros -o publish/docker/linux/arm/image.tar.gz
nix build .#packages.aarch64-linux.docker.albatros -o publish/docker/linux/arm64/image.tar.gz
nix build .#packages.i686-linux.docker.albatros -o publish/docker/linux/386/image.tar.gz
Et maintenant imaginons les commandes de base :
alba static push -t albatros:0.9 publish/ 's3://download.deuxfleurs.org?endpoint=garage.deuxfleurs.fr®ion=garage'
alba registry push -t albatros:0.9 publish/ 's3://registry.deuxfleurs.org?endpoint=garage.deuxfleurs.fr®ion=garage'
alba docker push publish/ docker.io/dxflrs/albatros:0.9
On pourra imaginer d'avantage de commandes par la suite comme :
alba static ls -t albatros 's3://download.deuxfleurs.org?endpoint=garage.deuxfleurs.fr®ion=garage'
alba static rm -t albatros:0.8 's3://download.deuxfleurs.org?endpoint=garage.deuxfleurs.fr®ion=garage'
alba static gc -t albatros --keep 10 's3://download.deuxfleurs.org?endpoint=garage.deuxfleurs.fr®ion=garage'
Mais c'est en dehors du périmètre pour le moment !
La glue
J'ai choisi d'utiliser un petit panel de bibliothèques pour faire la glue entre tout ça :
- Go CDK pour la publication des artefacts sur un object storage
- crane pour la publication d'images OCI sur un registre compatible
- Cobra comme framework CLI
- skopeo comme bibliothèque de manipulation des conteneurs