Ce projet est une application Node.js simple qui renvoie "Hello World" sur le port HTTP 3000. Cette app a pour but de démontrer l'utilisation de Docker, GitHub Actions pour l'intégration continue (CI) et le déploiement continu (CD) sur Docker Hub.
Pour construire l'image Docker de cette application, exécutez la commande suivante dans le répertoire racine du projet :
docker build -t sebgaillard/cicd .Cette commande construit une image Docker basée sur le Dockerfile fourni, taguée comme sebgaillard/cicd.
Après avoir construit l'image Docker, vous pouvez démarrer l'application localement en exécutant :
docker run --rm -p 3000:3000 sebgaillard/cicdPour tester l'application, utilisez :
curl http://localhost:3000Vous devriez voir "Hello World" comme réponse.
Le projet utilise GitHub Actions pour automatiser les tests et la construction de l'image Docker à chaque push dans les branches main et dev, ainsi qu'à chaque pull request vers main. Les étapes du workflow CI sont définies dans .github/workflows/ci.yml et incluent :
- Installation des dépendances.
- Construction de l'image Docker.
- Démarrage d'un conteneur à partir de l'image.
- Exécution d'une requête HTTP pour tester la réponse de l'application.
Le déploiement continu est configuré pour pousser automatiquement l'image Docker construite sur Docker Hub à chaque fusion dans la branche main. Les détails du workflow CD sont dans .github/workflows/cd.yml.
Lorsqu'un nouveau tag Git est créé, le workflow défini dans .github/workflows/tag-release.yml est déclenché, construisant et poussant l'image Docker sur Docker Hub avec le tag correspondant. Cela permet une gestion versionnée des déploiements.
Le linting du Dockerfile est réalisé automatiquement à chaque push et pull request grâce au workflow défini dans .github/workflows/docker-lint.yml, utilisant hadolint pour garantir les meilleures pratiques.
L'image Docker est déployée sur Docker Hub à l'adresse suivante : sebgaillard/cicd
Notre application peut être exécutée dans un conteneur Docker en mode "read-only". Voici comment la démarrer en mode Read-Only :
docker run --name mon-app-node --read-only -p 3000:3000 sebgaillard/cicdNotre projet utilise les capacités de GitHub Actions pour automatiser la génération de notes de release à chaque fois qu'un nouveau tag est créé et poussé sur GitHub.
Lorsque vous créez un nouveau tag dans votre dépôt local et le poussez sur GitHub, notre workflow CI/CD défini dans .github/workflows/tag-release.yml est déclenché.
Ce workflow inclut une étape spécifique pour créer une release GitHub, utilisant les informations du tag pour générer une nouvelle note de release.
Le projet contient trois branches principales :
main: la branche principale où les fonctionnalités testées et approuvées sont fusionnées.dev: une branche pour le développement et les tests des nouvelles fonctionnalités.test-breaking-bug: cette branche contient une pull request bloquée en raison d'un bug introduit volontairement. Le CI génère une erreur, ce qui empêche la fusion de cette branche avecmain.