ci: buduj tylko zmienione usługi i sprzątaj po sobie na runnerze #82
Reference in New Issue
Block a user
Delete Branch "fix/ci-buduj-tylko-zmienione"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Odpowiedź na puchnący rejestr obrazów — ale najpierw zmierzyłem, bo liczby wyszły inne, niż się spodziewałem.
Co pokazał pomiar
65 wersji, 12,85 GB — ale to licząc warstwy wielokrotnie. Kolejne wersje tej samej usługi dzielą warstwę bazową i warstwę zależności, więc realne zajęcie jest wyraźnie niższe. Astrololo trzyma się szczupło (0,06–0,16 GB na usługę); największy pojedynczy obraz to
conjurer-bot(0,71 GB).Prawdziwym motorem przyrostu było co innego:
build.yamlbudował cztery obrazy przy każdym pushu, niezależnie od tego, co się zmieniło. Zmiana w samej prezentacji dawała nowe wersjedata,logiciastrodemo— identyczne co do zawartości, różniące się wyłącznie tagiem.Co się zmienia
Główny pipeline liczy różnicę wobec poprzedniego commita i buduje tylko to, co jej dotyczy. Render i silnik B miały filtry ścieżek od początku — to przeniesienie tej samej zasady do reszty.
Sprawdzone na ośmiu ostatnich commitach mastera:
fd79513ekrany jako modułypresentation62d6f9dAI jako modułpresentation10ade55Dockerfile astrodemoastrodemo2e9d370zmiana nazwy + link_crypto w 5 usługachBez punktu odniesienia (pierwszy commit, przepisana historia) budujemy wszystko — lepiej zbudować za dużo niż wypuścić obraz ze starym kodem pod nowym tagiem.
Skutek uboczny do świadomości: tagi w
kustomization.yamlmogą się teraz rozjechać między usługami. Tak ma być — image-updater śledzi każdy obraz osobno.Zabezpieczenie przed cichym pominięciem
Usługa, której nie ma na żadnej liście, nigdy się nie zbuduje i nikt tego nie zauważy — brak obrazu wygląda potem na problem z rejestrem albo z siecią. Ten sam mechanizm kosztował nas już raz, przy liście obserwowanych obrazów w image-updaterze.
Pętla po
services/*/zatrzymuje budowanie i mówi wprost, co dopisać. Sprawdzone też od strony negatywnej: podstawiony katalog nowej usługi kończy przebieg kodem 1.Sprzątanie na runnerze
W
build.yamlibuild-render.yaml, zif: always()— bo to po nieudanym budowaniu zostaje najwięcej śmieci, a kolejny przebieg zaczyna od mniejszego zapasu miejsca niż poprzedni. Dokładnie tak zatkał się dysk przy renderze z TeX Live. Filtruntil=168hzostawia tydzień, więc warstwy bazowe i cache przeżywają i build nie zaczyna od zera.Czego ten PR NIE załatwia. Kilka GB w rejestrze to za mało na „ponad rozsądek", więc podejrzewam, że miejsce zżera co innego — logi i artefakty Gitea Actions albo cache Dockera na runnerze. Gitea stoi poza klastrem, więc nie zmierzę jej dysku. Warto sprawdzić u źródła
du -sh /var/lib/gitea/data/*idocker system dfna runnerze.Osobno warto ustawić regułę retencji w Gitei (Packages → Cleanup Rules): „zachowaj 5 najnowszych", nie „starsze niż X dni" — reguła po dacie skasowałaby
astrololo-render:latestz 5 sierpnia, który jest wdrożony.