Créer des Snaps en pointant simplement un formulaire Web vers un dépôt Git avec Fabrica : application à MicroK8s …

Image for post
Image for post

existe de nombreuses façons de créer des Snaps. Vous pouvez le faire sur votre système localement, en exécutant manuellement des commandes dans une fenêtre de terminal. Si vous avez un compte développeur dans le Snap Store , vous pouvez utiliser la fonctionnalité de construction intégrée pour créer des snaps.

Vous pouvez également utiliser Launchpad, Electron Builder ou une gamme de dispositifs de CI/CD. Vous pouvez également gérer votre propre usine de construction de snaps auto-hébergée comme cela va être le cas ici !

Image for post
Image for post

Pour rappel, Snap constitue un système open source de déploiement de logiciels et de gestion de packages développé par Canonical pour le système d’exploitation Linux. Les packages, appelés snaps, et l’outil pour les utiliser, snapd, fonctionnent sur une gamme de distributions Linux permettant un package logiciel en amont indépendant de la distribution. Les packages d’applications Snap sont autonomes et fonctionnent sur une large gamme de distributions Linux. Cela diffère des approches de gestion de packages Linux traditionnelles, comme APT ou YUM, qui nécessitent des packages spécifiquement adaptés pour chaque distribution Linux. Ce qui ajoute un délai entre le développement d’applications et son déploiement pour les utilisateurs finaux.

Les snaps eux-mêmes ne dépendent d’aucun «app store» et peuvent être obtenus à partir de n’importe quelle source. Ils peuvent donc être utilisés pour le déploiement de logiciels en amont. Lorsque des snaps sont déployés sur Ubuntu et d’autres versions de Linux, le Snap Store peut être utilisé comme back-end …

Image for post
Image for post
Image for post
Image for post

Fabrica est un tout nouveau service Web hébergé localement, conçu pour aider les développeurs à créer des snaps. L’idée derrière Fabrica est simple: obtenir un système automatisé qui peut connecter des référentiels distants et créer des snaps à chaque fois qu’il y a un changement dans l’arborescence source.

De cette façon, vous pouvez gérer plusieurs projets et générer des versions à jour, avec peu ou pas d’interaction …

Fabrica se compose de deux couches:

  • Une interface utilisateur Web simple qui vous permet d’ajouter un nombre illimité de dépôts Git clonables accessibles publiquement. Vous pouvez choisir des branches différentes (ou multiples) pour chaque dépôt.
  • Fabrica exécute un service de conteneur via l’hyperviseur LXD, qui génère des instances à l’intérieur desquelles les arborescences Git sont clonées et qui vont procéder à la construction des snaps. Vous pourrez ensuite «télécharger» les snaps générés, les tester et les utiliser.

Je commence donc à lancer un droplet Ubuntu 20.04 LTS dans DigitalOcean :

Image for post
Image for post
Image for post
Image for post

Et je procède à l’installation de Fabrica via l’installation de son snap :

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

Les snaps sont conçus pour être des applications autonomes, avec une forte sécurité et une isolation du système sous-jacent et des autres logiciels qui y sont exécutés. Un accès granulaire aux ressources système est possible grâce à un mécanisme appelé interfaces.

Certaines interfaces sont connectées automatiquement ; lorsque vous installez un composant logiciel enfichable, les ressources demandées sont provisionnées automatiquement. Certaines, pour des raisons de sécurité, ne le sont pas …

Image for post
Image for post

Dans ce cas particulier, j’accorde ici à Fabrica l’autorisation d’accéder au service LXD) monter / observer (lire la table de montage et les informations de quota) et à observer le système (lire le processus et les informations système) via ces commandes …

Image for post
Image for post

Fabrica s’exécute et écoute alors sur le port TCP 8000. Pour le moment, la connexion est disponible via HTTP, et il n’y a pas de tunnel sécurisé ou d’authentification, ce qui signifie que vous devez tester et exécuter ce service uniquement sur des réseaux de confiance …

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

Une fois le dépôt Git ajouté, je peux déclencher manuellement une génération de snap ou attendre une opération planifiée sur le dépôt. Fabrica interroge les dépôts Git ajoutés pour suivre d’éventuelles modifications toutes les cinq minutes. Et déclenchera la génération de snap si nécessaire …

Lancement ici manuel du “Build” :

Image for post
Image for post

Je peux voir que Fabrica a généré localement un conteneur LXC pour la construction du snap :

Image for post
Image for post

Pendant qu’un build est en cours d’exécution, je peux inspecter ce qui se passe en cliquant sur l’icône «i» dans chaque ligne de build.

Cela permet de dérouler le journal des logs et affichera les commandes en cours d’exécution à l’intérieur du conteneur lxc, comme l’extraction des données du dépôt Git, la mise à jour du système, la compilation ou d’autres commandes. Tout cela se produit indépendamment du système sous-jacent :

Image for post
Image for post

Je peux voir la génération du snap pour MicroK8s se terminer au bout d’une trentaine de minutes :

Image for post
Image for post

Une fois le paquet snap créé, on peut utiliser le bouton «Télécharger» pour le récupérer à l’intérieur de l’environnement de construction du conteneur et le placer quelque part sur le disque de son choix (voire l’installer directement ou bien le propulser sur le Snap Store) :

Image for post
Image for post
Image for post
Image for post

Je le place localement sur mon Instance Ubuntu 20.04 LTS en exécution sur DigitalOcean :

Image for post
Image for post

Et je le teste sur cette dernière (avec la branche Master, je me retrouve donc avec un snap de MicroK8s correspondant à la version 1.18.3 de Kubernetes):

Image for post
Image for post

MicroK8s m’a généré un cluster K8s actif et opérationnel sur l’instance Ubuntu :

Image for post
Image for post
Image for post
Image for post

De cette manière, je peux éviter de passer par le Snap Store (qui propose les mêmes versions) 😋 :

Image for post
Image for post

abrica génère actuellement des builds uniquement pour l’architecture locale (comme AMD64) sur laquelle il va s’exécuter. Donc si vous voulez créer des builds pour d’autres architectures, vous devrez configurer Fabrica sur le matériel correspondant (comme une carte Raspberry Pi 4 pour ARMv8 par exemple) …

On a vu que Fabrica propose une solution simple et pratique pour automatiser la construction de snaps en complètant les mécanismes de construction et d’intégration robustes déjà en place et en offrant une autre boîte à outils pratique aux développeurs.

Certaines options et fonctionnalités sont actuellement indisponibles, comme l’authentification ou une période de déclenchement personnalisable mais elles arriveront probablement dans un futur proche …

Image for post
Image for post

À suivre !

Above the clouds, the sky is always blue ...

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store