File size: 3,879 Bytes
632ab6a
 
 
 
 
 
 
 
 
 
 
12161ea
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
632ab6a
 
 
12161ea
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
710129f
 
 
 
12161ea
 
 
 
 
 
 
710129f
12161ea
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
632ab6a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
---
title: Quality Air Streamlit App
emoji: 💨
colorFrom: green
colorTo: blue
sdk: streamlit
python_version: "3.9"
app_file: streamlit/Home.py
pinned: false
---

# Guide de Configuration Jenkins et Pipeline CI/CD

## 📌 Introduction

Ce projet implémente un pipeline CI/CD dans Jenkins pour exécuter un processus ETL en conteneur Docker. Le pipeline inclut des tests unitaires et envoie les résultats sur AWS S3.

## 📂 Structure du projet

```bash
├── data/
│   ├── input_data.csv              # Fichier d'entrée pour l'ETL
│   ├── sample_output_data.csv      # Résultat attendu du processus ETL (échantillon)

├── jenkins/
│   └── Jenkinsfile                 # Pipeline Jenkins pour CI/CD

├── streamlit/
│   └── (streamlit files)           # Each file corresponds to a panel in the streamlit app

├── tests/
│   ├── Dockerfile                  # Dockerfile pour lancer les tests
│   ├── requirements.txt            # Dépendances spécifiques aux tests
│   ├── test_etl.py                 # Tests unitaires du pipeline ETL
│   └── upload_s3.py                # Script d'upload de test vers S3

├── Dockerfile                      # Conteneurisation du projet principal
├── etl_process.py                  # Script principal du processus ETL
├── requirements.txt                # Dépendances du projet
└── README.md                       # Documentation du projet
```

---

## 🚀 Étapes de configuration

### 1️⃣ Configuration de Jenkins

Assurez-vous que Jenkins est bien installé et fonctionne.

### 2️⃣ Ajout des Variables d'Environnement

Les variables AWS pour l'upload sur S3 doivent être ajoutées à Jenkins.

1. **Aller dans Jenkins****Manage Jenkins****Manage Credentials**
2. Sélectionnez **(global)****Add Credentials**
3. Ajoutez les clés AWS en tant que **Secret Text**:
   - **AWS_ACCESS_KEY_ID** et la nommer `aws-access-key`
   - **AWS_SECRET_ACCESS_KEY** et la nommer `aws-secret-key`
3. Ajoutez les clés Github en tant que **SSH Username with private key**:
   - **GITHUB_TOKEN** et la nommer `github_token`

Ou ajoutez-les directement dans Jenkins :

1. **Aller dans Jenkins** → **Manage Jenkins****Configure System**
2. Ajoutez sous **Global Properties****Environment Variables** :
   - `AWS_ACCESS_KEY_ID = VOTRE_CLE`
   - `AWS_SECRET_ACCESS_KEY = VOTRE_CLE_SECRET`
   - `GITHUB_TOKEN = VOTRE_TOKEN` 

### 3️⃣ Configuration du Job Jenkins

1. **Créer un nouveau job Jenkins****Pipeline**
2. **Sélectionner Pipeline Script from SCM**
3. **Ajouter le repository GitHub** contenant le `Jenkinsfile`
4. **Sauvegarder et exécuter**

---

## 🏗️ Fonctionnement du Pipeline

### 🛠️ Étapes du Pipeline :

1. **Clone du repository** : Récupère le code depuis GitHub.
2. **Exécution des tests** :
   - Lance les tests dans un conteneur Docker.
   - Enregistre les résultats en XML.
   - Envoie les résultats sur S3.
3. **Build de l'ETL** :
   - Construit l'image Docker pour l'ETL.
4. **Exécution de l'ETL** :
   - Monte les fichiers CSV et exécute le traitement.
   - Sauvegarde le résultat dans `data/output_data.csv`.

---

Ce pipeline CI/CD garantit l'intégration et le déploiement automatisé du processus ETL en utilisant Jenkins et Docker.

🔥 N'hésitez pas à adapter les configurations en fonction de votre environnement !


## 🏗️ A word on streamlit

To get the streamlit app to function on HuggingFace, we need to add the HF repo as an remote repository:
```
git remote set-url --add origin https://huggingface.co/spaces/martper56/streamlit_app
````

Then we need to push the code in the development branch as the main branch on streamlit:

```
git push -f https://huggingface.co/spaces/martper56/streamlit_app development:main
```