Izkušnje
Izdali smo okvarjen gradnik Keycloak 1.0.0
· Toolkit · 2 min branja
Cevovod CI gradnika Keycloak je 11. oktobra 2026 na potrditvi različice 1.0.0 pognal vse svoje zbirke testov in javil FAILS=0. Nato je opravilo za izdajo sliko naložilo v register. Štirinajst minut pozneje se je namestitev Reputa v razvojno okolje ustavila pri pripravi realma:
bash: /opt/microsaas/keycloak/setup: Permission denied
Napaka in zakaj je testi niso ujeli
Imenik /opt/microsaas/keycloak je imel dovoljenja 644. Brez bita za izvajanje vanj Keycloakov uporabnik (uid 1000) ni mogel vstopiti, zato se nista mogla zagnati ne setup ne require-terms. Dockerfile tega imenika ni ustvaril izrecno: nastal je kot nadrejeni imenik pri ukazu COPY --chmod=644 za datoteko s slovenskimi sporočili, njegova dovoljenja pa določi BuildKit, ki izvaja gradnjo.
Različico 1.0.0 sta zgradila dva BuildKita. Testno opravilo je pognalo docker build z BuildKitom, vgrajenim v Docker: imenik je dobil 755. Opravilo za izdajo je uporabilo buildx s privzeto sliko moby/buildkit (brez pripete različice; takrat je bila to v0.33.1): imenik je dobil 644. Ista potrditev, isti Dockerfile, dve sliki. Vse zbirke testov so uspele na sliki, ki je nismo izdali, izdane pa ni preveril noben test.
Razvojno okolje Reputa je delovalo naprej, ker je realm shranjen v podatkovni bazi. Različico 1.0.0 sta pripela le Reputo in Leadgener, ki še nista v produkciji.
Testiramo to, kar izdamo
Sprejeli smo pravilo: testiramo prav tisti artefakt, ki ga izdamo, zgrajen z orodjem, ki ga tudi objavi. Glavni popravek smo združili isti večer, različico 1.0.1 pa objavili naslednje jutro. V CI se je spremenilo tole:
- En BuildKit, pripet na različico in povzetek (digest) v
release/builder.sh, zgradi sliko za teste in sliko za register. Na povzetek je pripet tudi frontend, ki tolmači Dockerfile. - Dockerfile vse imenike gradnika ustvari z dovoljenji 755, preden vanje kopira datoteke, zato ta niso več odvisna od orodja za gradnjo.
- Zbirka testov strukture kot uid 1000 preveri, da je mogoče vstopiti v vsak imenik ter prebrati ali zagnati vsako datoteko.
- Po nalaganju opravilo za izdajo prenese sliko, ki jo vrne register, in testira prav njo. Od različice 1.0.2 vsako pot pod
/opt/microsaasz dovoljenji in lastnikom v slikah za amd64 in arm64 primerja z vnaprej določenim seznamom, oznako različice pa ustvari šele, ko preverjanje obeh slik uspe.
Za ekipo, ki gradi na toolkitu, to pomeni: vsaka različica gradnika Keycloak od 1.0.2 naprej je bila testirana na sliki, ki jo je zgradil isti BuildKit kot objavljeno sliko, po objavi pa še enkrat preverjena na sliki, ki jo prenesete, za obe platformi. Povzetek slike vzamete iz opomb ob izdaji, različica, ki po nalaganju ne prestane preverjanja, pa nima ne opomb ne oznake: v dnevniku sprememb je označena kot okvarjena, popravek pa izide kot naslednja popravna različica.