---
sidebar_position: 4
title: "Exécution & Intégration CI/CD"
---

# Exécution & Intégration CI/CD

---

## Exécution Manuelle des Migrations

Pour exécuter les migrations en attente localement ou manuellement sur un environnement spécifique :

```cmd
mvn flyway:migrate ^
-Dflyway.url=jdbc:postgresql://localhost:5432/TrizTresorie ^
-Dflyway.user=postgres ^
-Dflyway.password=VOTRE_MOT_DE_PASSE
```

Lorsque vous exécutez cette commande, Flyway va :
1. Vérifier la table `flyway_schema_history`.
2. Détecter quelles migrations ont déjà été exécutées.
3. Exécuter uniquement les nouvelles migrations en attente, dans l'ordre des versions.
4. Enregistrer automatiquement l'historique d'exécution.

---

## Intégration CI/CD

Dans votre pipeline de déploiement, l'étape de migration de la base de données doit se produire **avant** le démarrage du serveur d'application (par ex., Tomcat).

### Exemple d'Étape de Runner

```yaml
# --------------------------------------------------
# Exécuter les migrations de base de données
# --------------------------------------------------
- name: Run database migrations
  shell: cmd
  run: |
    cd %WORKSPACE_DIR%
    mvnw.cmd flyway:migrate ^
    -Dflyway.url=%DB_URL% ^
    -Dflyway.user=%DB_USER% ^
    -Dflyway.password=%DB_PASSWORD%
```

> [!IMPORTANT]
> Stockez les identifiants de la base de données en toute sécurité à l'aide de secrets CI/CD ou de variables d'environnement. Ne codez pas en dur les mots de passe dans les scripts du dépôt.

---

## Flux de Déploiement Final

Une séquence de déploiement standard et sûre utilisant Flyway doit suivre ces étapes :

1. Cloner le code source.
2. Compiler l'application.
3. Arrêter Tomcat.
4. Sauvegarder les fichiers de configuration.
5. Déployer les nouveaux artefacts de l'application.
6. Restaurer les fichiers de configuration.
7. **Exécuter les migrations Flyway.**
8. Démarrer Tomcat.
9. Nettoyer l'espace de travail.

---

## Référence de Structure de Projet

Pour référence, un projet correctement configuré aura une structure similaire à celle-ci :

```text
project/
│
├── src/
│   └── main/
│       └── resources/
│           └── db/
│               └── migration/
│                   ├── V1__initial_schema.sql
│                   ├── V2__task301_add_tables_t1_t2.sql
│                   ├── V3__add_client_phone.sql
│                   └── V4__fix_indexes.sql
│
├── pom.xml
└── mvnw.cmd
```
