Update README.md
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user