From 7f4494e1cbb6bf5b60318cc42a433856453cafab Mon Sep 17 00:00:00 2001 From: Serge Koenigsmann Date: Tue, 20 Oct 2026 09:04:43 +0200 Subject: [PATCH 1/4] Probe devops #419: Image ohne Docker-Daemon bauen (Kaniko, Buildah) Co-Authored-By: Claude Opus 5.5 --- .gitea/workflows/probe-419.yml | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 .gitea/workflows/probe-419.yml diff --git a/.gitea/workflows/probe-419.yml b/.gitea/workflows/probe-419.yml new file mode 100644 index 0000000..9563c3c --- /dev/null +++ b/.gitea/workflows/probe-419.yml @@ -0,0 +1,32 @@ +name: Probe 419 - Image ohne Docker-Daemon + +# Nur Probe fuer devops #419, wird vor dem Merge wieder entfernt. Baut, pusht nicht. + +on: + push: + branches: [probe/419-ohne-daemon] + +jobs: + kaniko: + runs-on: inmedias-zone + container: + image: gcr.io/kaniko-project/executor:v1.24.0-debug + steps: + - name: Bauen mit Kaniko + shell: sh + run: | + /kaniko/executor \ + --context "git://gitea.inmedias.it/sko/ci-images.git#refs/heads/probe/419-ohne-daemon" \ + --context-sub-path python \ + --dockerfile Dockerfile \ + --no-push + + buildah: + runs-on: inmedias-zone + steps: + - uses: actions/checkout@v4 + - name: Bauen mit Buildah + run: | + id; grep -E 'Cap(Eff|Bnd)' /proc/self/status + apt-get update -qq && apt-get install -y -qq buildah >/dev/null + buildah --storage-driver vfs build --isolation chroot -t probe python -- 2.39.5 From d3cd0b7263a83a0fad181f248f67a37fbed326ce Mon Sep 17 00:00:00 2001 From: Serge Koenigsmann Date: Tue, 20 Oct 2026 09:14:06 +0200 Subject: [PATCH 2/4] Probe devops #419: Kaniko als Docker-Schritt statt Job-Container Co-Authored-By: Claude Opus 5.5 --- .gitea/workflows/probe-419.yml | 29 +++++++++-------------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/.gitea/workflows/probe-419.yml b/.gitea/workflows/probe-419.yml index 9563c3c..d6b327b 100644 --- a/.gitea/workflows/probe-419.yml +++ b/.gitea/workflows/probe-419.yml @@ -7,26 +7,15 @@ on: branches: [probe/419-ohne-daemon] jobs: - kaniko: - runs-on: inmedias-zone - container: - image: gcr.io/kaniko-project/executor:v1.24.0-debug - steps: - - name: Bauen mit Kaniko - shell: sh - run: | - /kaniko/executor \ - --context "git://gitea.inmedias.it/sko/ci-images.git#refs/heads/probe/419-ohne-daemon" \ - --context-sub-path python \ - --dockerfile Dockerfile \ - --no-push - - buildah: + kaniko-schritt: runs-on: inmedias-zone steps: - uses: actions/checkout@v4 - - name: Bauen mit Buildah - run: | - id; grep -E 'Cap(Eff|Bnd)' /proc/self/status - apt-get update -qq && apt-get install -y -qq buildah >/dev/null - buildah --storage-driver vfs build --isolation chroot -t probe python + - name: Bauen mit Kaniko als Docker-Schritt + uses: docker://ghcr.io/osscontainertools/kaniko:debug@sha256:7ab44d0131c3051b6dea128067e258c7afb5c4815082a93b9cf6c624f2140bf0 + with: + args: >- + --context=dir://${{ github.workspace }}/python + --dockerfile=${{ github.workspace }}/python/Dockerfile + --no-push + --verbosity=info -- 2.39.5 From b53fadd1e6295e62eece9cd393f3c4a698467d86 Mon Sep 17 00:00:00 2001 From: Serge Koenigsmann Date: Tue, 20 Oct 2026 09:16:55 +0200 Subject: [PATCH 3/4] ci-python ohne Docker-Daemon bauen: Kaniko als Docker-Schritt (devops #419) Co-Authored-By: Claude Opus 5.5 --- .gitea/workflows/build-ci-python.yml | 71 ++++++++++++++++++---------- .gitea/workflows/probe-419.yml | 34 +++++++++++-- 2 files changed, 76 insertions(+), 29 deletions(-) diff --git a/.gitea/workflows/build-ci-python.yml b/.gitea/workflows/build-ci-python.yml index b75dc06..01d55d9 100644 --- a/.gitea/workflows/build-ci-python.yml +++ b/.gitea/workflows/build-ci-python.yml @@ -3,9 +3,28 @@ name: Build ci-python image # Baut das ci-python-Image und pusht es in die Gitea-Container-Registry. # Tags: :latest (mitlaufend) + : (unveränderlich, zum Pinnen in Workflows). # -# Voraussetzungen im Runner: -# - Docker verfügbar (Socket oder DinD) — Image-Bau braucht einen Docker-Daemon. -# - Secrets: REGISTRY_USER (Gitea-User) + REGISTRY_TOKEN (PAT, Scope package:write). +# **Ohne Docker-Daemon** (devops #419). Seit dem Umzug der internen Zone (#410) +# reicht kein Runner mehr den Docker-Socket in den Job - wer ihn hat, ist root +# auf dem Wirt. Kaniko braucht ihn nicht: Es fuehrt die RUN-Schritte direkt in +# seinem eigenen Container aus und schreibt die Schichten selbst. Buildah ging +# nicht, es braucht fuer RUN einen User-Namespace, und den verweigert der +# Job-Container ohne Zusatzrechte. +# +# Kaniko laeuft als **Docker-Schritt** (`uses: docker://`), nicht als +# Job-Container: act_runner haelt einen Job-Container mit /bin/sleep am Leben, +# und das Kaniko-Image hat sleep nur unter /busybox. Der Docker-Schritt startet +# mit dem Einstiegspunkt des Images und bekommt den Arbeitsbereich eingehaengt. +# +# Image: der gepflegte Fork osscontainertools/kaniko. Das Projekt von Google ist +# seit Mai 2025 archiviert. Per Digest gepinnt; auffrischen mit +# docker buildx imagetools inspect ghcr.io/osscontainertools/kaniko:debug +# +# **Kein Schicht-Cache, mit Absicht.** Der woechentliche Lauf ist fuer +# Sicherheits-Updates da. Mit Cache kaeme `apt-get update` nie neu zum Zug - +# die Zeile aendert sich nicht, also gaelte die alte Schicht. Ohne Cache dauert +# der Bau unter einer Minute. +# +# Secrets: REGISTRY_USER (Gitea-User) + REGISTRY_TOKEN (PAT, Scope package:write). on: push: @@ -23,30 +42,34 @@ env: jobs: build: - runs-on: ubuntu-latest - # Kein expliziter Socket-Mount: der act_runner mountet /var/run/docker.sock - # bei docker_host:"" automatisch in den Job-Container. build-push-action - # redet darüber mit dem Host-Daemon. Ein zusätzliches `-v ...docker.sock` - # führt zu "Duplicate mount point" (siehe Issue #11). + runs-on: inmedias-zone steps: - uses: actions/checkout@v4 - - uses: docker/setup-buildx-action@v3 - - - name: Login to Gitea registry - uses: docker/login-action@v3 - with: - registry: ${{ env.REGISTRY }} - username: ${{ secrets.REGISTRY_USER }} - password: ${{ secrets.REGISTRY_TOKEN }} + # Kaniko liest die Zugangsdaten aus $DOCKER_CONFIG/config.json. Der + # Docker-Schritt sieht vom Job-Container nur den Arbeitsbereich, also + # muss die Datei dort liegen - ausserhalb von python/, damit sie nicht + # im Build-Kontext landet. + - name: Registry-Zugang fuer Kaniko + env: + REGISTRY_USER: ${{ secrets.REGISTRY_USER }} + REGISTRY_TOKEN: ${{ secrets.REGISTRY_TOKEN }} + run: | + mkdir -p .kaniko-docker + auth=$(printf '%s:%s' "$REGISTRY_USER" "$REGISTRY_TOKEN" | base64 -w0) + printf '{"auths":{"%s":{"auth":"%s"}}}' "$REGISTRY" "$auth" > .kaniko-docker/config.json - name: Build & push - uses: docker/build-push-action@v6 + uses: docker://ghcr.io/osscontainertools/kaniko:debug@sha256:7ab44d0131c3051b6dea128067e258c7afb5c4815082a93b9cf6c624f2140bf0 + env: + DOCKER_CONFIG: ${{ github.workspace }}/.kaniko-docker with: - context: python - push: true - tags: | - ${{ env.REGISTRY }}/${{ env.IMAGE }}:latest - ${{ env.REGISTRY }}/${{ env.IMAGE }}:${{ github.sha }} - cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE }}:buildcache - cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE }}:buildcache,mode=max + args: >- + --context=dir://${{ github.workspace }}/python + --dockerfile=${{ github.workspace }}/python/Dockerfile + --destination=${{ env.REGISTRY }}/${{ env.IMAGE }}:latest + --destination=${{ env.REGISTRY }}/${{ env.IMAGE }}:${{ github.sha }} + + - name: Registry-Zugang entfernen + if: always() + run: rm -rf .kaniko-docker diff --git a/.gitea/workflows/probe-419.yml b/.gitea/workflows/probe-419.yml index d6b327b..be791e2 100644 --- a/.gitea/workflows/probe-419.yml +++ b/.gitea/workflows/probe-419.yml @@ -1,21 +1,45 @@ name: Probe 419 - Image ohne Docker-Daemon -# Nur Probe fuer devops #419, wird vor dem Merge wieder entfernt. Baut, pusht nicht. +# Nur Probe fuer devops #419, wird vor dem Merge wieder entfernt. Gleiche +# Schritte wie build-ci-python.yml, pusht aber nur das Tag :probe-419. on: push: branches: [probe/419-ohne-daemon] +env: + REGISTRY: gitea.inmedias.it + IMAGE: sko/ci-python + jobs: - kaniko-schritt: + build: runs-on: inmedias-zone steps: - uses: actions/checkout@v4 - - name: Bauen mit Kaniko als Docker-Schritt + + # Kaniko liest die Zugangsdaten aus $DOCKER_CONFIG/config.json. Der + # Docker-Schritt sieht vom Job-Container nur den Arbeitsbereich, also + # muss die Datei dort liegen - ausserhalb von python/, damit sie nicht + # im Build-Kontext landet. + - name: Registry-Zugang fuer Kaniko + env: + REGISTRY_USER: ${{ secrets.REGISTRY_USER }} + REGISTRY_TOKEN: ${{ secrets.REGISTRY_TOKEN }} + run: | + mkdir -p .kaniko-docker + auth=$(printf '%s:%s' "$REGISTRY_USER" "$REGISTRY_TOKEN" | base64 -w0) + printf '{"auths":{"%s":{"auth":"%s"}}}' "$REGISTRY" "$auth" > .kaniko-docker/config.json + + - name: Build & push uses: docker://ghcr.io/osscontainertools/kaniko:debug@sha256:7ab44d0131c3051b6dea128067e258c7afb5c4815082a93b9cf6c624f2140bf0 + env: + DOCKER_CONFIG: ${{ github.workspace }}/.kaniko-docker with: args: >- --context=dir://${{ github.workspace }}/python --dockerfile=${{ github.workspace }}/python/Dockerfile - --no-push - --verbosity=info + --destination=${{ env.REGISTRY }}/${{ env.IMAGE }}:probe-419 + + - name: Registry-Zugang entfernen + if: always() + run: rm -rf .kaniko-docker -- 2.39.5 From 535b8a0f1629825278c65c1a9c144d78f75f749b Mon Sep 17 00:00:00 2001 From: Serge Koenigsmann Date: Tue, 20 Oct 2026 09:19:59 +0200 Subject: [PATCH 4/4] Probe-Workflow fuer devops #419 entfernen Co-Authored-By: Claude Opus 5.5 --- .gitea/workflows/probe-419.yml | 45 ---------------------------------- 1 file changed, 45 deletions(-) delete mode 100644 .gitea/workflows/probe-419.yml diff --git a/.gitea/workflows/probe-419.yml b/.gitea/workflows/probe-419.yml deleted file mode 100644 index be791e2..0000000 --- a/.gitea/workflows/probe-419.yml +++ /dev/null @@ -1,45 +0,0 @@ -name: Probe 419 - Image ohne Docker-Daemon - -# Nur Probe fuer devops #419, wird vor dem Merge wieder entfernt. Gleiche -# Schritte wie build-ci-python.yml, pusht aber nur das Tag :probe-419. - -on: - push: - branches: [probe/419-ohne-daemon] - -env: - REGISTRY: gitea.inmedias.it - IMAGE: sko/ci-python - -jobs: - build: - runs-on: inmedias-zone - steps: - - uses: actions/checkout@v4 - - # Kaniko liest die Zugangsdaten aus $DOCKER_CONFIG/config.json. Der - # Docker-Schritt sieht vom Job-Container nur den Arbeitsbereich, also - # muss die Datei dort liegen - ausserhalb von python/, damit sie nicht - # im Build-Kontext landet. - - name: Registry-Zugang fuer Kaniko - env: - REGISTRY_USER: ${{ secrets.REGISTRY_USER }} - REGISTRY_TOKEN: ${{ secrets.REGISTRY_TOKEN }} - run: | - mkdir -p .kaniko-docker - auth=$(printf '%s:%s' "$REGISTRY_USER" "$REGISTRY_TOKEN" | base64 -w0) - printf '{"auths":{"%s":{"auth":"%s"}}}' "$REGISTRY" "$auth" > .kaniko-docker/config.json - - - name: Build & push - uses: docker://ghcr.io/osscontainertools/kaniko:debug@sha256:7ab44d0131c3051b6dea128067e258c7afb5c4815082a93b9cf6c624f2140bf0 - env: - DOCKER_CONFIG: ${{ github.workspace }}/.kaniko-docker - with: - args: >- - --context=dir://${{ github.workspace }}/python - --dockerfile=${{ github.workspace }}/python/Dockerfile - --destination=${{ env.REGISTRY }}/${{ env.IMAGE }}:probe-419 - - - name: Registry-Zugang entfernen - if: always() - run: rm -rf .kaniko-docker -- 2.39.5