Aus der Tasks-API wird ein Image – in der Forgejo-eigenen Container Registry.
git.example.com/owner/image – z. B.
git.example.com/team/tasks-api. Owner ist der Nutzer oder die Organisation. Anders als
bei Docker Hub kannst du nicht in einen beliebigen neuen Pfad pushen, ohne dass der Namespace
existiert.
image:
runs-on: docker
needs: [test]
if: ${{ forgejo.ref == 'refs/heads/main' }}
steps:
- uses: actions/checkout@v4
- uses: https://code.forgejo.org/docker/login-action@v3
with:
registry: git.example.com
username: ${{ secrets.REGISTRY_USER }}
password: ${{ secrets.REGISTRY_TOKEN }}
- uses: https://code.forgejo.org/docker/build-push-action@v5
with:
context: .
push: true
tags: git.example.com/team/tasks-api:${{ forgejo.sha }}
FORGEJO_TOKEN/GITHUB_TOKEN reicht zum Lesen des Repos, aber
nicht zum Pushen von Paketen/Images. Lege ein Personal Access Token (oder
Org-Token) mit Paket-Schreibrechten an und hinterlege es als Secret (z. B.
REGISTRY_TOKEN). Genau hier bleibt der erste Push-Versuch fast immer hängen.
build-push-action braucht eine funktionierende Docker-Umgebung im Runner. Je nach
Runner-Setup heisst das Docker-in-Docker (privilegiert) oder ein gemounteter Docker-Socket.
Steht kein Docker bereit, sind Alternativen wie buildah/kaniko üblich. Das ist
Runner-Konfiguration – im Zweifel mit der Admin-Person klären.
$CI_REGISTRY_IMAGE vordefiniert
$CI_REGISTRY_PASSWORD pusht out-of-the-box
DinD-Service üblich
Image-Name selbst zusammensetzen
Eigenes PAT-Secret zum Pushen nötig ★
docker/*-Actions + Docker im Runner
Frage: Ein Workflow nutzt zum Login ${{ secrets.GITHUB_TOKEN }}
und scheitert beim Push mit „unauthorized". Warum?
Der automatische Token darf keine Pakete schreiben. Du brauchst ein eigenes PAT mit Paket-Schreibrecht als Secret.
Aufgabe: Tagge das Image zusätzlich mit latest, wenn auf
main gebaut wird.
tags: |
git.example.com/team/tasks-api:${{ forgejo.sha }}
git.example.com/team/tasks-api:latest
Mehrere Tags als YAML-Mehrzeiler. Den main-Filter erledigt schon das
if: am Job.
Womit authentifiziert sich der Push in die Forgejo-Registry?
Der automatische Token kann nicht pushen. Ein PAT mit Paket-Schreibrecht, als Secret hinterlegt, ist nötig.
Wie ist ein Image in der Forgejo-Registry benannt?
Registry = Instanz-Domain, dann Owner (Nutzer/Org), dann Image-Name.