Compare commits

..
5 Commits
Author SHA1 Message Date
sko 35446ccfa3 Merge pull request 'ci-python ohne Docker-Daemon bauen: Kaniko (devops #419)' (#1) from probe/419-ohne-daemon into main
Build ci-python image / build (push) Successful in 1m0s
Reviewed-on: #1
2026-10-20 09:31:54 +02:00
skoandClaude Opus 5.5 535b8a0f16 Probe-Workflow fuer devops #419 entfernen
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 09:19:59 +02:00
skoandClaude Opus 5.5 b53fadd1e6 ci-python ohne Docker-Daemon bauen: Kaniko als Docker-Schritt (devops #419)
Probe 419 - Image ohne Docker-Daemon / build (push) Successful in 1m6s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 09:16:55 +02:00
skoandClaude Opus 5.5 d3cd0b7263 Probe devops #419: Kaniko als Docker-Schritt statt Job-Container
Probe 419 - Image ohne Docker-Daemon / kaniko-schritt (push) Successful in 1m1s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 09:14:06 +02:00
skoandClaude Opus 5.5 7f4494e1cb 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
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 09:04:43 +02:00
+47 -24
View File
@@ -3,9 +3,28 @@ name: Build ci-python image
# Baut das ci-python-Image und pusht es in die Gitea-Container-Registry. # Baut das ci-python-Image und pusht es in die Gitea-Container-Registry.
# Tags: :latest (mitlaufend) + :<sha> (unveränderlich, zum Pinnen in Workflows). # Tags: :latest (mitlaufend) + :<sha> (unveränderlich, zum Pinnen in Workflows).
# #
# Voraussetzungen im Runner: # **Ohne Docker-Daemon** (devops #419). Seit dem Umzug der internen Zone (#410)
# - Docker verfügbar (Socket oder DinD) — Image-Bau braucht einen Docker-Daemon. # reicht kein Runner mehr den Docker-Socket in den Job - wer ihn hat, ist root
# - Secrets: REGISTRY_USER (Gitea-User) + REGISTRY_TOKEN (PAT, Scope package:write). # 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: on:
push: push:
@@ -23,30 +42,34 @@ env:
jobs: jobs:
build: build:
runs-on: ubuntu-latest runs-on: inmedias-zone
# 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).
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- uses: docker/setup-buildx-action@v3 # Kaniko liest die Zugangsdaten aus $DOCKER_CONFIG/config.json. Der
# Docker-Schritt sieht vom Job-Container nur den Arbeitsbereich, also
- name: Login to Gitea registry # muss die Datei dort liegen - ausserhalb von python/, damit sie nicht
uses: docker/login-action@v3 # im Build-Kontext landet.
with: - name: Registry-Zugang fuer Kaniko
registry: ${{ env.REGISTRY }} env:
username: ${{ secrets.REGISTRY_USER }} REGISTRY_USER: ${{ secrets.REGISTRY_USER }}
password: ${{ secrets.REGISTRY_TOKEN }} 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 - 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: with:
context: python args: >-
push: true --context=dir://${{ github.workspace }}/python
tags: | --dockerfile=${{ github.workspace }}/python/Dockerfile
${{ env.REGISTRY }}/${{ env.IMAGE }}:latest --destination=${{ env.REGISTRY }}/${{ env.IMAGE }}:latest
${{ env.REGISTRY }}/${{ env.IMAGE }}:${{ github.sha }} --destination=${{ 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 - name: Registry-Zugang entfernen
if: always()
run: rm -rf .kaniko-docker