Update README.md

This commit is contained in:
Marcin-Ramotowski
2026-08-11 17:27:00 +02:00
parent 76f8f491a5
commit 81f92dc210
+29 -10
View File
@@ -126,7 +126,7 @@ scenariuszy na branche.
| Branch | Zawartość | | Branch | Zawartość |
|--------|-----------| |--------|-----------|
| `main` | Kod aplikacji (bazowy), ten README, skrypty analizy | | `main` | Kod aplikacji (bazowy), ten README, skrypty analizy |
| `dev` | Gałąź rozwojowa aplikacji | | `dev` | Gałąź rozwojowa aplikacji + narzędzia pomiarowe (`deployment_timer.sh`, `data_analysis.py`) |
| `jenkins-pipeline` | CI w Jenkins (`.jenkins/Jenkinsfile`, `podTemplate.yaml`) | | `jenkins-pipeline` | CI w Jenkins (`.jenkins/Jenkinsfile`, `podTemplate.yaml`) |
| `woodpecker` | CI w Woodpecker (`.woodpecker/build.yaml`) | | `woodpecker` | CI w Woodpecker (`.woodpecker/build.yaml`) |
| `argo-workflows` | CI w Argo Workflows / Argo Events (`argo-workflows/*`) | | `argo-workflows` | CI w Argo Workflows / Argo Events (`argo-workflows/*`) |
@@ -179,6 +179,7 @@ JWT (tokeny w ciasteczkach), rolami oraz mechanizmem wylogowania (unieważnianie
| `POST` | `/login` | Logowanie, ustawia token JWT w ciasteczku | brak | | `POST` | `/login` | Logowanie, ustawia token JWT w ciasteczku | brak |
| `GET` | `/logout` | Wylogowanie (unieważnienie tokena) | zalogowany | | `GET` | `/logout` | Wylogowanie (unieważnienie tokena) | zalogowany |
| `GET` | `/health` | Sprawdzenie stanu aplikacji i połączenia z bazą | brak *(dostępne na branchach z potokami CI/CD)* | | `GET` | `/health` | Sprawdzenie stanu aplikacji i połączenia z bazą | brak *(dostępne na branchach z potokami CI/CD)* |
| `GET` | `/version` | Zwraca wdrożoną wersję (`APP_VERSION` = SHA commita) i czas budowy | brak *(dostępne na branchach z potokami CI/CD)* |
Przy pierwszym uruchomieniu, jeśli baza jest pusta, tworzone jest domyślne konto administratora Przy pierwszym uruchomieniu, jeśli baza jest pusta, tworzone jest domyślne konto administratora
(zob. zmienne `ADMIN_*`). (zob. zmienne `ADMIN_*`).
@@ -303,17 +304,35 @@ znajduje kontener `api` i podmienia w nim tag obrazu na SHA nowego commita.
## Pomiar dostarczenia zmiany ## Pomiar dostarczenia zmiany
Metryką porównawczą jest **czas dostarczenia zmiany** (od commita do działającej aplikacji na Metryką porównawczą jest **czas dostarczenia zmiany** od commita do momentu, w którym nowa
klastrze), rozbity na składowe: wersja aplikacji faktycznie działa na klastrze. Pomiar jest w pełni zautomatyzowany, a
narzędzia znajdują się na branchu **`dev`**:
- **trigger_time** — czas od startu potoku CI do faktycznego rozpoczęcia budowania, - **[`deployment_timer.sh`](../../tree/dev/deployment_timer.sh)** — automatyczny pomiar
- **build_time** — czas budowania i publikacji obrazu, pojedynczego wdrożenia. Skrypt:
- **deploy_time** — czas wdrożenia na klaster, 1. odczytuje aktualną wersję z endpointu `/version`,
- **full_time** — całkowity czas dostarczenia. 2. zapisuje znacznik czasu do pliku, commituje go (`Automatyczna zmiana: <timestamp>`)
i wykonuje `git push` — co wyzwala cały łańcuch CI/CD,
3. odpytuje `/version` co sekundę, aż zwrócona wersja się zmieni,
4. zapisuje wynik (`start,koniec,czas,stara_wersja,nowa_wersja`) do pliku
`deployment_times.csv`.
Pomiar wykonywany jest osobno dla każdego z [9 scenariuszy](#scenariusze-pomiarowe) na Wykrycie zmiany opiera się na tym, że potok CI buduje obraz z `APP_VERSION` równym SHA
podstawie znaczników czasu z potoków CI/CD, co pozwala porównać narzędzia zarówno pod kątem commita, a `/version` zwraca tę wartość. Commity `Automatyczna zmiana: <timestamp>` widoczne
całkowitego czasu, jak i wkładu poszczególnych etapów. w historii repozytorium pochodzą właśnie z kolejnych przebiegów tego skryptu.
- **[`data_analysis.py`](../../tree/dev/data_analysis.py)** — agreguje zebrane pomiary
(po 20 wdrożeń na scenariusz) i generuje wykresy słupkowe średnich czasów dostarczenia do
katalogu `plots/`. Tworzy 6 porównań: trzy według narzędzia CI (dla każdego CD) i trzy
według narzędzia CD (dla każdego CI), obejmując wszystkie [9 scenariuszy](#scenariusze-pomiarowe).
```bash
pip install matplotlib
python3 data_analysis.py # zapisuje plots/mean_times_0..5.png
```
> Pliki wynikowe pomiarów (`deployment_times.csv`, katalog `plots/`) są generowane przez
> powyższe skrypty i nie są śledzone w repozytorium.
## Struktura repozytorium ## Struktura repozytorium