ci-python ohne Docker-Daemon bauen: Kaniko (devops #419) #1

Merged
sko merged 4 commits from probe/419-ohne-daemon into main 2026-10-20 09:31:54 +02:00
Owner

Behebt devops #419. Seit dem Umzug der internen Zone (#410) reicht kein Runner mehr den Docker-Socket in den Job. build-ci-python hätte am Montag, 26.10., 03:00 zum ersten Mal versagt.

Was sich ändert

Kaniko statt docker/build-push-action. Kaniko führt die RUN-Schritte in seinem eigenen Container aus und braucht keinen Docker-Daemon. Es läuft als Docker-Schritt (uses: docker://…), nicht als Job-Container: act_runner hält Job-Container mit /bin/sleep am Leben, und im Kaniko-Image liegt sleep nur unter /busybox.

Image: der gepflegte Fork ghcr.io/osscontainertools/kaniko (v1.28.6), per Digest gepinnt. Das Kaniko-Projekt von Google ist seit Mai 2025 archiviert.

runs-on: inmedias-zone statt ubuntu-latest, nach #354.

Kein Schicht-Cache mehr. Mit dem Registry-Cache kam apt-get update beim wöchentlichen Neubau nie neu zum Zug: Die Zeile ändert sich nicht, also galt die alte Schicht. Der Neubau für Sicherheits-Updates war damit wirkungslos. Ohne Cache dauert der Bau unter einer Minute.

Verworfen, mit Beleg

  • Buildah: unshare(CLONE_NEWUSER): Operation not permitted. Für RUN bräuchte es Rechte, die der Umzug gerade entzogen hat.
  • Kaniko als Job-Container: exec: "/bin/sleep": stat … no such file

Wie geprüft

Auf dem echten Runner inmedias-intern, über einen eigenen Probe-Workflow auf diesem Zweig:

  1. Bau ohne Push: alle vier RUN-Schritte, der Selbsttest im Dockerfile ist grün.
  2. Bau mit Push auf das Tag :probe-419, mit denselben Secrets: angekommen.
  3. Lokal gezogen: Python 3.12.13, uv 0.12.1, ruff 0.16.1, pytest 9.1.1, node v18.20.4. Keine config.json mit auths im Image, kein /kaniko, kein .kaniko-docker.
  4. Probe-Workflow und Tag :probe-419 danach wieder entfernt.

Zu wissen

  • Das Image ist entpackt rund 40 MB größer (528 statt 489 MB) bei gleichem Inhalt: gleiche Verzeichnisgrößen, gleiche 131 Pakete. Kaniko legt Dateien mit geändertem Zeitstempel in der Folgeschicht noch einmal ab.
  • Das Tag :buildcache in der Registry wird nicht mehr benutzt.
  • Der einzige Verbraucher von ci-python ist icinga2/ansible-inventory-exporter, mit :latest. Erhoben über die Workflows aller 380 Repositories.

Nach dem Merge baut der Push auf main das Image einmal neu. Das ist zugleich die Probe für :latest und :<sha>.

🤖 Generated with Claude Code

Behebt [devops #419](https://redmine.inmedias.it/issues/419). Seit dem Umzug der internen Zone (#410) reicht kein Runner mehr den Docker-Socket in den Job. `build-ci-python` hätte am **Montag, 26.10., 03:00** zum ersten Mal versagt. ## Was sich ändert **Kaniko statt `docker/build-push-action`.** Kaniko führt die `RUN`-Schritte in seinem eigenen Container aus und braucht keinen Docker-Daemon. Es läuft als Docker-Schritt (`uses: docker://…`), nicht als Job-Container: act_runner hält Job-Container mit `/bin/sleep` am Leben, und im Kaniko-Image liegt `sleep` nur unter `/busybox`. **Image:** der gepflegte Fork `ghcr.io/osscontainertools/kaniko` (v1.28.6), per Digest gepinnt. Das Kaniko-Projekt von Google ist seit Mai 2025 archiviert. **`runs-on: inmedias-zone`** statt `ubuntu-latest`, nach #354. **Kein Schicht-Cache mehr.** Mit dem Registry-Cache kam `apt-get update` beim wöchentlichen Neubau nie neu zum Zug: Die Zeile ändert sich nicht, also galt die alte Schicht. Der Neubau für Sicherheits-Updates war damit wirkungslos. Ohne Cache dauert der Bau unter einer Minute. ## Verworfen, mit Beleg - **Buildah:** `unshare(CLONE_NEWUSER): Operation not permitted`. Für `RUN` bräuchte es Rechte, die der Umzug gerade entzogen hat. - **Kaniko als Job-Container:** `exec: "/bin/sleep": stat … no such file` ## Wie geprüft Auf dem echten Runner `inmedias-intern`, über einen eigenen Probe-Workflow auf diesem Zweig: 1. Bau ohne Push: alle vier `RUN`-Schritte, der Selbsttest im Dockerfile ist grün. 2. Bau mit Push auf das Tag `:probe-419`, mit denselben Secrets: angekommen. 3. Lokal gezogen: Python 3.12.13, uv 0.12.1, ruff 0.16.1, pytest 9.1.1, node v18.20.4. Keine `config.json` mit `auths` im Image, kein `/kaniko`, kein `.kaniko-docker`. 4. Probe-Workflow und Tag `:probe-419` danach wieder entfernt. ## Zu wissen - Das Image ist entpackt rund 40 MB größer (528 statt 489 MB) bei gleichem Inhalt: gleiche Verzeichnisgrößen, gleiche 131 Pakete. Kaniko legt Dateien mit geändertem Zeitstempel in der Folgeschicht noch einmal ab. - Das Tag `:buildcache` in der Registry wird nicht mehr benutzt. - Der einzige Verbraucher von `ci-python` ist `icinga2/ansible-inventory-exporter`, mit `:latest`. Erhoben über die Workflows aller 380 Repositories. Nach dem Merge baut der Push auf `main` das Image einmal neu. Das ist zugleich die Probe für `:latest` und `:<sha>`. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
sko added 4 commits 2026-10-20 09:20:14 +02:00
Probe devops #419: Image ohne Docker-Daemon bauen (Kaniko, Buildah)
Probe 419 - Image ohne Docker-Daemon / kaniko (push) Failing after 13s
Probe 419 - Image ohne Docker-Daemon / buildah (push) Failing after 20s
7f4494e1cb
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Probe devops #419: Kaniko als Docker-Schritt statt Job-Container
Probe 419 - Image ohne Docker-Daemon / kaniko-schritt (push) Successful in 1m1s
d3cd0b7263
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ci-python ohne Docker-Daemon bauen: Kaniko als Docker-Schritt (devops #419)
Probe 419 - Image ohne Docker-Daemon / build (push) Successful in 1m6s
b53fadd1e6
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
sko merged commit 35446ccfa3 into main 2026-10-20 09:31:54 +02:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: sko/ci-images#1