Dem aufmerksamen Leser dürfte bereits aufgefallen sein, dass ich die Harbor Container Registry als Container Registry verwende. Eine Challenge die ich mit diesem Programm hatte war, dass ich nicht so recht verstanden habe wie alte Versionen von Images, die keinen Tag haben, gelöscht werden.
Meine Anforderung
Wenn ich programmiere und den Code per Git auf meinen Server übertrage, läuft üblicherweise eine CI Pipeline los. Je nach Projekt baut die dann möglicherweise ein Container Image und lädt dieses wiederum zu Harbor hoch. Der Container bekommt dann typischerweise den Tag latest oder main, abhängig vom Kontext.
Diese Images benutze ich typischerweise nur kurzfristig zum Testen; aber der gleiche Workflow erzeugt die Images auch wenn ich ein Release mache. Dann wird der Container halt stattdessen mit x.y.z getaggt - und diese Images nutze ich durchaus auch längerfristig.
Dieser Workflow hat aber ein kleines Problem: Die Anzahl der Container Images die nicht getaggt sind, wächst mit der Zeit, und die ungetaggten Container Images werde ich sicher nicht mehr nutzen. Insbesondere wird nämlich das Image mit dem Tag main immer wieder neu erzeugt, und vom alten Image wird dann der Tag natürlich entfernt. Diese ungetaggten Images möchte ich also gerne löschen.
Die Löschung aufsetzen
Harbor kann das eigentlich von Haus aus: In einem Projekt kann ich Policies aufsetzen in denen ich erkläre, welche Images ich behalten möchte.
Für mein Projekt lautet die Policy dann (auf englisch): “For the repositories matching **, retain always with tags matching **”. Beim Setup geht ein eigenes Fenster auf, das bei mir dann so ausschaut:

Cool, und damit sind wir fertig! Würde man denken. Stimmt aber leider nicht. Was noch fehlt ist irgendwie offensichtlich sobald man es weiß, ursprünglich war mir das aber nicht klar, und das ist der Grund für diesen Post.
Die Policy tatsächlich ausführen
Es macht vielleicht Sinn, zuerst einen “Dry Run” auszuführen, um festzustellen ob das passiert was man gerne hätte dass passiert. Notiz am Rande: Wenn Harbor ganz intensiv mitteilt dass das was man tut wichtige Konsequenzen haben kann, dann hast du vermutlich nicht auf den “Dry Run” Knopf gedrückt - für euch getestet.
Auf der gleichen Seite findest du einen “Schedule”, der primär auf None gesetzt ist. Und solange dieser Schedule fehlt, wird garnichts aufgeräumt! Ich habe hier “wöchentlich” gewählt; für mich ist das definitiv gut genug.
Resultat
Das wussten wir eigentlich schon, aber: Lesen hilft…