https://github.com/Emma-Coco/devops-gpt
Sujet : Lancement du projet "DevOpsGPT" Durée : 3h00 | Documents et internet autorisés | Travail individuel
Vous avez été recruté(e) par l'entreprise OpenDevOps. Votre première mission est d'aider à concevoir et déployer leur toute nouvelle application web : DevOpsGPT. Ce TP est divisé en 3 parties indépendantes. Si vous bloquez sur une question, passez à la suivante !
Pour commencer : Vous devez obligatoirement partir du code source fourni dans ce dépôt. Pour cela, cliquez sur le bouton "Fork" en haut à droite pour copier ce projet sur votre compte GitHub, ou téléchargez-le en cliquant sur "Code" > "Download ZIP".
Pour le rendu : Vous rendrez le lien vers votre dépôt GitHub public (fortement recommandé pour l'exercice 3) ou une archive .zip contenant vos fichiers finaux.
Pensez à bien nommer vos fichiers et à vérifier que votre archive ou repos contient vos schémas, vos fichiers Docker, votre fichier YAML et un fichier contenant vos réponses aux questions ouvertes.
Les captures d'écran sont autorisées et même vivement encouragées.
Ici, pas de code. Vous pouvez utiliser un outil comme draw.io, un document Word, ou même faire les schémas sur papier et les prendre en photo.
1. Diagramme de Contexte (2 pts) Faites un schéma simple montrant le système "DevOpsGPT" :
- L' Utilisateur (qui envoie des questions et reçoit des réponses).
- L' API GPT-4 (à qui on envoie le texte pour générer la réponse).
- La Base de données (où l'on sauvegarde les historiques).
2. Organigramme / Flowchart (3 pts) Dessinez l'algorithme (les étapes de fonctionnement) quand un utilisateur envoie un message. Représentez les étapes suivantes avec des blocs et des flèches :
- Réception du message de l'utilisateur.
- Le message contient-il des insultes ? (Filtre de modération).
- Envoi du message à l'API.
- Sauvegarde de la réponse dans la Base de données.
- Affichage de la réponse à l'utilisateur.
3. Dictionnaire de données (1 pt)
Faites un tableau listant les informations (attributs) que l'on doit stocker pour un Message.
Exemple de colonnes attendues : Nom de la donnée (ex: Contenu), Type (ex: Texte/String), Description.
Trouvez au moins 4 attributs pertinents.
1. Méthodologie et Git (2 pts) L'équipe utilise la méthode Scrum. On vous demande de développer le système d' "Abonnement Premium".
-
Question A : En tant qu’utilisateur, je veux souscrire à un abonnement Premium, afin d’accéder à des fonctionnalités avancées et à des réponses plus rapides.
-
Question B : Donnez les commandes Git exactes à taper dans le terminal pour :
- Créer une nouvelle feature nommée
feature-premium-subscriptionet faire un commit.
git checkout -b feature-premium-subscription git add . git commit -m "Add premium subscription feature"
- Une fois le travail terminé et fusionné sur
main, créer un tag de version nommév1.0.0.
git checkout main git merge feature-premium-subscription git tag v1.0.0
- Pousser ce tag sur le serveur GitHub.
git push origin main git push origin v1.0.0
2. Dockerisation (3 pts)
Le projet est divisé en deux dossiers : frontend (l'interface) et backend (l'API). Vous devez créer deux fichiers Dockerfiles :
- Dans le dossier
backend/: Créez unDockerfilequi utilisenode:22-alpine, définit le dossier de travail sur/app, installe les dépendances et lancenode index.jssur le port3000. - Dans le dossier
frontend/: Créez unDockerfilesimilaire qui installe les dépendances et lancenpm run devpour le développement.
3. Orchestration avec Docker Compose (2 pts)
À la racine du projet, créez un fichier docker-compose.yml qui lance :
- Le service
chat-api(construit à partir du dossier./backend) sur le port3000. - Le service
chat-ui(construit à partir du dossier./frontend) sur le port5173. - Le service
cache(utilise l'imageredis:7-alpine) sur le port6379. - Assurez-vous que l'API et l'UI peuvent communiquer entre elles.
Vous voulez que GitHub vérifie le code à chaque modification, mais ne déploie l'application que lorsqu'une nouvelle version (Tag) est publiée.
1. Le Workflow CI/CD (5 pts)
Créez l'arborescence de dossiers .github/workflows/ et placez-y un fichier main.yml.
Écrivez ce fichier YAML en respectant ces consignes :
- Le workflow se déclenche lors d'un
pushsur la branchemainET lors de la création d'un tag commençant parv(ex:v1.0.0). - Il contient un job nommé
test-and-deployqui tourne surubuntu-latest. - Les étapes (
steps) du job sont :- Récupérer le code (utiliser l'action
actions/checkout@v4). - Installer Node.js version 22 (utiliser
actions/setup-node@v4). - Lancer la commande :
npm install. - Lancer la commande :
npm test. - Simuler un déploiement avec la commande
echo "Déploiement en cours..."UNIQUEMENT si le push est un tag.
- Récupérer le code (utiliser l'action
2. Sécurité et Secrets (2 pts)
Votre code a besoin d'une clé secrète (OPENAI_API_KEY) pour se connecter à l'intelligence artificielle, mais il est strictement interdit de l'écrire en clair dans votre code.
-
Question A : Settings --> Secrets and variables --> Actions --> New repository secret --> Je l'ai appelé OPENAI_API_KEY (voir screen dans dossier Exercice 3 - Question 2.A à la racine)
-
Question B : env: OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
exemple complet :
- name: Deploy application env: OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} run: echo "Déploiement sécurisé"