Update README.md
This commit is contained in:
@@ -126,7 +126,7 @@ scenariuszy na branche.
|
||||
| Branch | Zawartość |
|
||||
|--------|-----------|
|
||||
| `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`) |
|
||||
| `woodpecker` | CI w Woodpecker (`.woodpecker/build.yaml`) |
|
||||
| `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 |
|
||||
| `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` | `/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
|
||||
(zob. zmienne `ADMIN_*`).
|
||||
@@ -303,17 +304,35 @@ znajduje kontener `api` i podmienia w nim tag obrazu na SHA nowego commita.
|
||||
|
||||
## Pomiar dostarczenia zmiany
|
||||
|
||||
Metryką porównawczą jest **czas dostarczenia zmiany** (od commita do działającej aplikacji na
|
||||
klastrze), rozbity na składowe:
|
||||
Metryką porównawczą jest **czas dostarczenia zmiany** — od commita do momentu, w którym nowa
|
||||
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,
|
||||
- **build_time** — czas budowania i publikacji obrazu,
|
||||
- **deploy_time** — czas wdrożenia na klaster,
|
||||
- **full_time** — całkowity czas dostarczenia.
|
||||
- **[`deployment_timer.sh`](../../tree/dev/deployment_timer.sh)** — automatyczny pomiar
|
||||
pojedynczego wdrożenia. Skrypt:
|
||||
1. odczytuje aktualną wersję z endpointu `/version`,
|
||||
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
|
||||
podstawie znaczników czasu z potoków CI/CD, co pozwala porównać narzędzia zarówno pod kątem
|
||||
całkowitego czasu, jak i wkładu poszczególnych etapów.
|
||||
Wykrycie zmiany opiera się na tym, że potok CI buduje obraz z `APP_VERSION` równym SHA
|
||||
commita, a `/version` zwraca tę wartość. Commity `Automatyczna zmiana: <timestamp>` widoczne
|
||||
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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user