Développer et déployer en local avec Earthly
Yama CMS propose une gestion des pipelines CI/CD commune entre les différents générateurs de sites statiques et plateformes de CI/CD via Earthly.
Earthly utilise le standard de conteneurs OCI pour exécuter un manifeste avec une syntaxe familière, compatible avec n'importe quel langage et sur n'importe quel système (en local sur votre machine, ou dans votre pipeline de CI/CD.) Grâce aux containers et son manifeste déclaratif, Earthly peut automatiquement paralléliser ses builds.
Ce guide explique comment profiter des containers et d'Earthly pour développer et publier en local, peu importe le système d'exploitation, et sans avoir à installer directement les outils nécessaires au générateur de site statique.
Earthly est entièrement facultatif ! Si vous avez déjà les outils nécessaires d'installé ou que vous avez déjà une pipeline de CI/CD en place, vous n'en avez peut-être pas besoin. Earthly est utile pour tester un générateur ou faire des actions manuelles rapidement, et nous permet de supporter simplement plusieurs systèmes de CI/CD avec un seul manifeste par générateur.
Installation
Installez Earthly en suivant les instructions sur le site officiel. Alternativement, vous pouvez lancer Earthly via Docker :
docker run \
--tty \
--privileged \
--rm \
-v "$PWD":/workspace \
-v /var/run/docker.sock:/var/run/docker.sock \
-e NO_BUILDKIT=1 \
earthly/earthly:v0.7.6 --push +swift-list
Configuration des variables d'environnement
Pour déployer votre site sur OpenStack, vous devez déclarer les variables d'environnement nécessaires (soit dans votre terminal, soit dans un fichier .secret). Les valeurs sont disponibles lors de la configuration de votre site dans l'espace "manager" :
OS_USERNAME="user-abcdEFG12345"
OS_PASSWORD="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
OS_AUTH_URL="https://auth.cloud.ovh.net/v3/"
OS_AUTH_VERSION="3"
OS_TENANT_NAME="9029000000000000"
OS_STORAGE_URL="https://storage.gra.cloud.ovh.net/v1/AUTH_bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
OS_CONTAINER_NAME="ccccccccccccccccccccc"
Référence des targets Earthly
Nos manifestes définissent au minimum les targets suivantes :
+buildgénère le site.+deploy-productiongénère le site, puis le téléverse dans le bucket configuré.+deploy-previewgénère le site puis le téléverse et ajoute unrobots.txtpour indiquer aux robots indexeurs des moteurs de recherche que le site ne doit pas être indexé.
Nous proposons aussi des targets pour faciliter les tests et le développement en local :
+devlance un serveur de developpement, selon les images Docker disponible pour le générateur.+stop-devstoppe le serveur de developpement.+updateinstalle les dépendances et les manifestes (bundle installpour ruby,npm installpour js...).+execpermet de lancer une commande arbitraire.+shellouvre un shell bash temporaire dans l'environnement du générateur.+swift-listliste le contenu du bucket associé au site.
Chaque target (sauf +deploy-production et +deploy-preview) génère des artifacts (un ou plusieurs fichiers et dossiers), qui peuvent être sauvegardés en local avec l'option --push :
earthly --push +buildsauvegardera le site construit par votre générateur.earthly --push +updatesauvegardera les dépendances (node_modules...) et les manifestesGemfile,package.json).
Utilisation
Build & Deploy
Lancez la commande earthly --push --env-file ./.env +deploy-production. Earthly se chargera de lancer et d'attendre le résultat de la target +build avant de déployer le site.
Une pipeline de CI/CD suivra à peu près le même plan : Installer Earthly, récupérer les variables d’environnement depuis les secrets configurés dans le dépôt, puis lancer la target voulue (+deploy-production ou +deploy-preview.)
Yama CMS propose des manifestes pour certains systèmes de CI. Un manifeste est automatiquement ajouté à votre dépôt pendant la configuration; ils sont également disponible ici. Earthly propose également des guides pour d'autres systèmes de CI ici.
Lancer un serveur de développement
Vous pouvez lancer le serveur de développement dans un container avec la commande earthly +dev. Vous pouvez changer le port en ajoutant par exemple --port=3000.
# Make sure dependencies are installed
earthly --push +update
# Start dev server
earthly +dev
# Do some development!
# Later on, stop the dev container
+earthly stop-dev
Si vous quittez le terminal, Earthly ne stoppera pas le container ! Vous deverez manuellement lancer la commande earthly +stop-dev (ou docker stop earthly-dev-server).
Mettre à jour les dépendances
Lancez la commande earthly --push +update pour télécharger les dépendances et mettre à jour les paquets selon leur semantic_versioning.
Lancer une commande
Lancez la commande earthly --push +exec --command="<cmd>" pour executer <cmd> dans le container de développement. Par exemple, vous pouvez installer une nouvelle dépendance npm avec earthly --push +exec --command="npm install <package>".
Obtenir un shell
Lancez la commande earthly --push +shell pour obtenir un shell dans le container de développement. À noter que seuls les fichiers type "manifeste" (package.json, Gemfile) seront sauvegardés ; toutes modifications sur d'autres fichiers seront ignorées. Utiilisez la commande exit (ou Ctrl+D) pour revenir à votre terminal.
Modifier son manifeste Earthfile
Tous nos manifestes Earthfile suivent la même structure et sont commentés. Nous vous invitons à adapter votre Earthfile selon les besoins de votre site (par exemple, pour ajouter une étape de build en plus, ou une variable d'environnement). Si vous avez déjà écrit un Dockerfile ou un Makefile, vous trouverez la syntaxe familière ! Pour le reste, la documentation officielle d'Earthly est disponible à l'adresse https://docs.earthly.dev/.
Si vous souhaitez utiliser Earthly avec un générateur de site statique qui n'est pas encore supporté par Yama CMS, veuillez consulter la page dédiée à la création d'un manifeste personnalisé.
Earthly est encore en phase bêta. Certaines features et patterns pourront changer dans le futur (même si les manifestes resteront rétrocompatibles grâce au header VERSION), ou sont encore en état de reflection (par exemple la place du cache dans le cloud et sa relation avec des builds reproductibles).
Cependant, nous pensons qu'Earthly et des outils similaires (comme Dagger.io) sont prometteurs et résolvent de nombreuses problématiques des systèmes de CI/CD actuels tout en réduisant considérablement notre charge de maintenance, d'où ce choix technique.