---
sidebar_position: 4
title: "Execution & CI/CD Integration"
---

# Execution & CI/CD Integration

---

## Running Migrations Manually

To execute pending migrations locally or manually on a specific environment:

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

When you run this command, Flyway will:
1. Check the `flyway_schema_history` table.
2. Detect which migrations have already been executed.
3. Execute only the new, pending migrations in version order.
4. Save the execution history automatically.

---

## CI/CD Integration

In your deployment pipeline, the database migration step must occur **before** the application server (e.g., Tomcat) starts.

### Example Runner Step

```yaml
# --------------------------------------------------
# Run database migrations
# --------------------------------------------------
- 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]
> Store database credentials securely using CI/CD secrets or environment variables. Do not hardcode passwords inside the repository scripts.

---

## Final Deployment Flow

A standard, safe deployment sequence utilizing Flyway should follow these steps:

1. Clone the source code.
2. Build the application.
3. Stop Tomcat.
4. Backup configuration files.
5. Deploy the new application artifacts.
6. Restore configuration files.
7. **Run Flyway migrations.**
8. Start Tomcat.
9. Clean up the workspace.

---

## Project Structure Reference

For reference, a properly configured project will have a structure similar to this:

```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
```
