Der Build-Job braucht einen Docker-Daemon. Statt den Socket global in jeden Job zu mounten, fordert nur dieser Job ihn per container.options an. Setzt voraus, dass der Runner /var/run/docker.sock in valid_volumes erlaubt (deploy-CICD, setup-cicd-runner.yml). Ref sko/deploy-CICD#11. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ci-images
Vorgebackene CI-Basis-Images für Gitea Actions. Ziel: schneller Cold-Start und
reproduzierbare Läufe, statt Werkzeuge bei jedem Lauf per curl | sh /
pip install nachzuladen (siehe Recherche „CI/CD-Optimierung mit Docker & Ansible").
Images
| Image | Registry-Pfad | Inhalt |
|---|---|---|
ci-python |
gitea.inmedias.it/sko/ci-python |
debian:bookworm-slim + uv + gepinnte CPython, ruff, pytest |
Weitere Stacks (z. B. ci-node) kommen als eigene Unterordner nach demselben
Muster dazu, sobald der Python-Pilot trägt.
Versionen pflegen (eine Quelle der Wahrheit)
Alle Versionen stehen als ARG bzw. gepinnter Digest oben im jeweiligen
Dockerfile (z. B. python/Dockerfile). Ändern → auf main pushen → der
Workflow build-ci-python baut und pusht neu.
Digests auffrischen:
docker buildx imagetools inspect debian:bookworm-slim
docker buildx imagetools inspect ghcr.io/astral-sh/uv:0.12.1
Verwendung in einem Repo (Weg B: container:, kein Runner-Eingriff)
jobs:
test:
runs-on: ubuntu-latest
container: gitea.inmedias.it/sko/ci-python:latest
steps:
- uses: actions/checkout@v4
- run: uv sync --frozen # repo-eigene Deps aus uv.lock
- run: ruff check .
- run: pytest
Zum reproduzierbaren Pinnen statt :latest einen unveränderlichen :<sha>-Tag
verwenden.
Registry-Login für den Pull passiert im Runner über einen container.credentials-
Block oder docker/login-action gegen gitea.inmedias.it (PAT, Scope package:read).
Build lokal testen
docker build -t ci-python:test python
docker run --rm ci-python:test python --version