Une suite de développement en continu libre et légère
Dans cette présentation, je vais t’introduire trois outils légers pour développement en continu libre d’applications web et mise en production: Forgejo, Woodpecker et CapRover.
Ces outils ont comme particularité de demander peu de ressources. Ils sont minimalistes et n’ont pas autant de fonctionnalités que les outils populaires tels que GitLab, Jenkins ou Kubernetes.
Forgejo et Woodpecker sont disponibles sur la plateforme d’autohébergement Yunohost.
Cette présentation a été faite lors du Linux Meetup Québec du 2 avril 2024.
Forgejo
Forgejo est un logiciel de gestion de code source utilisant git. Il est forké de Gitea par la coopérative de développement allemande Codeberg. Il est rétrocompatible avec Gitea, mais avec une équipe de développement indépendante.
Fonctionnalités disponibles:
- Utilisateurs et organisations
- Wiki
- Tableaux de projets Kanban
- Billets et Milestones
- Webhooks
- Fournisseur d’authentification Oauth2
- API complète
- Intégrations avec Cargo (Rust) et Chef
- Forgejo
Woodpecker
Woodpecker est un outil simple de CI/CD dérivé de drone.io.
Il utilise des containers pour exécuter des scripts. Il utilise des actions d’une manière qui est davantage similaire à GitHub Actions que GitLab. De mon coté, j’ai converti mes scripts en utilisant tout simplement Docker in Docker.
Donc, si on passe de GitLab à Woodpecker, il faut réécrire les scripts de déploiement en continu.
Nous allons en voir un exemple.
Mon impression avec Woodpecker a été que c’est vraiment très minimaliste.
Il utilise Forgejo comme fournisseur d’authentification, mais l’intégration bogue un peu. On doit vider les cookies manuellement pour se reconnecter lorsque ça fait longtemps qu’on y est allé.
Il faut ajouter les projets manuellement dans Woodpecker. Il lit les projets du Forgejo avec l’utilisateur connecté.
Les secrets peuvent être global, par organisation et par projet. De mon expérience, les secrets par organisation ne sont pas bien enregistrés, alors j’utilise seulement des secrets globaux. Ce n’est pas problématique comme je suis seul utilisateur, mais ça peut être un inconvénient en organisation.
On peut aussi utiliser des images personnalisées pour exécuter des tâches CI/CD, mais je n’ai pas exploré ces fonctionnalités.
Exemple de script
Variables d’environnement spécifiées dans les secrets de Woodpecker. L’extraction des variables se fait en minuscules dans le script.
DOCKERHUB_USERNAME
DOCKERHUB_PASSWORD
CAPROVER_URL
CAPROVER_PASSWORD
Variables fournies dans Woodpecker
CI_REPO_NAME
CI_COMMIT_REF
steps: - name: docker image: plugins/docker commands: - docker login docker.io -u $${DOCKERHUB_USERNAME} -p $${DOCKERHUB_PASSWORD} - docker build --rm=true -f Dockerfile -t $${CI_COMMIT_REF} . - docker tag $${CI_COMMIT_REF} $${DOCKERHUB_USERNAME}/$${CI_REPO_NAME}:latest - docker push $${DOCKERHUB_USERNAME}/$${CI_REPO_NAME}:latest secrets: [ dockerhub_username, dockerhub_password ] volumes: - /var/run/docker.sock:/var/run/docker.sock - name: caprover image: plugins/docker commands: - docker login docker.io -u $${DOCKERHUB_USERNAME} -p $${DOCKERHUB_PASSWORD} - docker run --network=host caprover/cli-caprover:2.2.3 caprover deploy --caproverUrl "$${CAPROVER_URL}" --caproverPassword "$${CAPROVER_PASSWORD}" -a "$${CI_REPO_NAME}" -i docker.io/$${DOCKERHUB_USERNAME}/$${CI_REPO_NAME} secrets: [ dockerhub_username, dockerhub_password, caprover_url, caprover_password ] volumes: - /var/run/docker.sock:/var/run/docker.sock
CapRover
CapRover est une plateforme d’hébergement d’applications basée sur Docker Swarm. Elle fonctionne de manière similaire à Heroku ou les services PaaS des fournisseurs cloud.
La création d’une application se fait en un clic, et le script de mise en production s’exécute depuis une application client en ligne de commande, qu’on peut appeler directement dans le fichier de script de Woodpecker avec une instance de Docker in Docker.
On peut configurer directement les variables d’environnement dans l’interface. On peut aussi ajouter un certificat Let’s Encrypt et de l’authentification HTTP Basic, si l’application n’a pas son propre mécanisme d’authentification.
Registre de conteneurs
GitLab a son propre registre de conteneurs, mais ces plateformes légères n’en ont pas. J’utilise donc Docker Hub pour mes images publiques parce que c’est gratuit. Sinon, je conseille d’utiliser un registre d’images privées. Il y en a chez la plupart des fournisseurs cloud.
Infrastructure requise
Woodpecker et Forgejo peuvent être installés avec d’autres logiciels sur un serveur.
Woodpecker requiert aussi des workers sur un serveur séparé, idéalement pas avec des logiciels en production.
CapRover requiert sont propre serveur sur Debian qui va servir seulement à cette plateforme.
Je t’invite à essayer ces outils de développement en continu libre et à m’en donner des nouvelles !