added flyWay docs
All checks were successful
Deploy triz-docs to 150 / build-and-deploy (push) Successful in 1h8m50s
All checks were successful
Deploy triz-docs to 150 / build-and-deploy (push) Successful in 1h8m50s
This commit is contained in:
parent
bfc333138b
commit
03812b1d14
@ -0,0 +1,306 @@
|
||||
# Flyway Setup Guide for PostgreSQL + Tomcat Deployment
|
||||
|
||||
## Goal
|
||||
|
||||
This setup allows automatic database updates during deployment.
|
||||
|
||||
Each database modification is added as a new SQL migration file. During CI/CD deployment, Flyway executes only the missing migrations safely and in order.
|
||||
|
||||
This avoids:
|
||||
|
||||
- giant SQL files
|
||||
- duplicate executions
|
||||
- manual tracking of DB changes
|
||||
- production inconsistencies
|
||||
|
||||
---
|
||||
|
||||
# Environment
|
||||
|
||||
This guide is adapted for:
|
||||
|
||||
- PostgreSQL 17
|
||||
- Java 17
|
||||
- Maven Wrapper (`mvnw.cmd`)
|
||||
- Tomcat deployment
|
||||
- Existing production databases
|
||||
- Windows CI/CD runner
|
||||
|
||||
---
|
||||
|
||||
# 1. Add Flyway to Maven
|
||||
|
||||
## Add Flyway Maven Plugin
|
||||
|
||||
In `pom.xml`:
|
||||
|
||||
```xml
|
||||
<plugin>
|
||||
<groupId>org.flywaydb</groupId>
|
||||
<artifactId>flyway-maven-plugin</artifactId>
|
||||
<version>11.0.0</version>
|
||||
</plugin>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. Create Migration Folder
|
||||
|
||||
Create this folder inside the project:
|
||||
|
||||
```text
|
||||
src/main/resources/db/migration
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 3. Migration Naming Convention while for each Db modification a new file is added
|
||||
|
||||
Flyway requires this exact format:
|
||||
|
||||
```text
|
||||
V<version>__<description>.sql
|
||||
```
|
||||
|
||||
Examples:
|
||||
|
||||
```text
|
||||
V1__initial_schema.sql
|
||||
V2__task301_add_tables_t1_t2.sql
|
||||
V3__add_client_phone.sql
|
||||
V4__fix_invoice_indexes.sql
|
||||
```
|
||||
|
||||
Important:
|
||||
|
||||
- Use TWO underscores (`__`) after the version
|
||||
- Never rename old migrations after execution
|
||||
- Never modify old executed migrations
|
||||
|
||||
---
|
||||
|
||||
# 4. Existing Database Initialization (One-Time Only)
|
||||
|
||||
Since the database already exists in production, Flyway must first create its history table.
|
||||
|
||||
## First Migration
|
||||
|
||||
Create:
|
||||
|
||||
```text
|
||||
V1__initial_schema.sql
|
||||
```
|
||||
|
||||
This file represents the current database structure.
|
||||
|
||||
---
|
||||
|
||||
## Baseline Existing Database
|
||||
|
||||
Run once only:
|
||||
|
||||
```cmd
|
||||
mvn flyway:baseline ^
|
||||
-Dflyway.url=jdbc:postgresql://localhost:5432/TrizTresorie ^
|
||||
-Dflyway.user=postgres ^
|
||||
-Dflyway.password=YOUR_PASSWORD ^
|
||||
-Dflyway.baselineVersion=1
|
||||
```
|
||||
|
||||
This creates:
|
||||
|
||||
```text
|
||||
flyway_schema_history
|
||||
```
|
||||
|
||||
and marks version `1` as already applied WITHOUT executing the SQL.
|
||||
|
||||
---
|
||||
|
||||
# 5. Adding New Database Changes
|
||||
|
||||
Every new database modification must be added as a new migration file.
|
||||
|
||||
Example:
|
||||
|
||||
```text
|
||||
V2__task301_add_tables_t1_t2.sql
|
||||
```
|
||||
|
||||
Example content:
|
||||
|
||||
```sql
|
||||
CREATE TABLE table1 (
|
||||
id BIGSERIAL PRIMARY KEY
|
||||
);
|
||||
|
||||
CREATE TABLE table2 (
|
||||
id BIGSERIAL PRIMARY KEY
|
||||
);
|
||||
```
|
||||
|
||||
Commit the migration file with the application code.
|
||||
|
||||
---
|
||||
|
||||
# 6. Running Migrations
|
||||
|
||||
To execute pending migrations:
|
||||
|
||||
```cmd
|
||||
mvn flyway:migrate ^
|
||||
-Dflyway.url=jdbc:postgresql://localhost:5432/TrizTresorie ^
|
||||
-Dflyway.user=postgres ^
|
||||
-Dflyway.password=YOUR_PASSWORD
|
||||
```
|
||||
|
||||
Flyway will:
|
||||
|
||||
1. Check `flyway_schema_history`
|
||||
2. Detect already executed migrations
|
||||
3. Execute only new migrations
|
||||
4. Save execution history automatically
|
||||
|
||||
---
|
||||
|
||||
# 7. CI/CD Integration
|
||||
|
||||
Add this step before starting Tomcat.
|
||||
|
||||
## Example
|
||||
|
||||
```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%
|
||||
```
|
||||
|
||||
Recommended:
|
||||
|
||||
- Store DB credentials in CI/CD secrets or environment variables
|
||||
- Do not hardcode passwords inside the repository
|
||||
|
||||
---
|
||||
|
||||
# 8. Recommended Developer Workflow
|
||||
|
||||
When a developer needs a database change:
|
||||
|
||||
## DO
|
||||
|
||||
Create a new migration:
|
||||
|
||||
```text
|
||||
V5__add_product_status.sql
|
||||
```
|
||||
|
||||
Commit and push.
|
||||
|
||||
---
|
||||
|
||||
## DO NOT
|
||||
|
||||
Do NOT modify:
|
||||
|
||||
```text
|
||||
V1__initial_schema.sql
|
||||
```
|
||||
|
||||
or any already executed migration.
|
||||
|
||||
Always create a new migration instead.
|
||||
|
||||
---
|
||||
|
||||
# 9. Important Notes
|
||||
|
||||
## Migration Order
|
||||
|
||||
Flyway executes migrations in version order:
|
||||
|
||||
```text
|
||||
V1
|
||||
V2
|
||||
V3
|
||||
V4
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Failed Migrations
|
||||
|
||||
If a migration fails:
|
||||
|
||||
- deployment stops
|
||||
- Tomcat should not start
|
||||
- database remains protected from partial execution
|
||||
|
||||
Fix the migration and rerun deployment.
|
||||
|
||||
---
|
||||
|
||||
## Production Safety
|
||||
|
||||
Do not:
|
||||
|
||||
- delete `flyway_schema_history`
|
||||
- modify old executed migrations
|
||||
- manually rerun executed SQL files
|
||||
|
||||
---
|
||||
|
||||
# 10. Example Project Structure
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 11. Final Deployment Flow
|
||||
|
||||
Recommended deployment sequence:
|
||||
|
||||
1. Clone source
|
||||
2. Build application
|
||||
3. Stop Tomcat
|
||||
4. Backup configuration
|
||||
5. Deploy new application
|
||||
6. Restore configuration
|
||||
7. Run Flyway migrations
|
||||
8. Start Tomcat
|
||||
9. Cleanup workspace
|
||||
|
||||
---
|
||||
|
||||
# Result
|
||||
|
||||
With this setup:
|
||||
|
||||
- database updates become automatic
|
||||
- all environments stay synchronized
|
||||
- production deployments become safer
|
||||
- developers only add new migration files
|
||||
- no manual SQL tracking is needed
|
||||
|
||||
@ -0,0 +1,8 @@
|
||||
{
|
||||
"label": "Data Base Modification Workflow + flyway + CICD",
|
||||
"position": 2,
|
||||
"link": {
|
||||
"type": "generated-index",
|
||||
"description": "Standard workflow for Data Base Modification + flyway + CICD."
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user