Problem
Der container:build Job (Kaniko v1.23.2-debug) schlägt seit 2026-08-28 fehl mit:
error checking push permissions: GET https://gitlab.opencode.de/jwt/auth?scope=repository%3Aegovlab%2Frefa-test%3Apush%2Cpull&service=container_registry
→ UNAUTHORIZED: HTTP Basic: Access denied
Was wir probiert haben
- CI_REGISTRY_USER / CI_REGISTRY_PASSWORD (GitLab predefined) — funktionierte bis 2026-08-27 (Pipeline 743397, Job 3373816), seitdem UNAUTHORIZED
- CI_JOB_TOKEN mit gitlab-ci-token ebenfalls UNAUTHORIZED
- Docker CLI (docker:latest + docker:dind) docker login erfolgreich, aber docker:dind Service nicht verfügbar auf Kubernetes Runner (kein /var/run/docker.sock)
Frage
Hat sich an der Container Registry Auth auf OpenCode etwas geändert? Benötigt der Kubernetes Runner spezielle Einstellungen für Kaniko? Gibt es eine Alternative zu Kaniko auf Kubernetes Runnern?
Workaround
container:build ist aktuell deaktiviert (allow_failure: true). Der Rest der Pipeline läuft normal durch.
Links
Vielen Dank für die Hilfe!
Matthias
Wir haben Antwort vom Support erjhalten (Tobias Gurtzick)
Es handelt sich um eine Verhaltensänderung des GitLabs und ist uns bereits bekannt.
Mit GitLab 19 wurde das Format der CI/CD Job Tokens standardmäßig vom bisherigen Legacy-Format auf JWT umgestellt. Diese JWT-Tokens sind deutlich länger. Das betrifft auch CI_REGISTRY_PASSWORD, da dieser Wert innerhalb eines CI-Jobs dem jeweiligen CI_JOB_TOKEN entspricht.
Das erklärt auch sehr gut den zeitlichen Zusammenhang: Ihre Pipeline funktionierte zuvor mit CI_REGISTRY_USER / CI_REGISTRY_PASSWORD und schlägt nun bei der Authentifizierung über /jwt/auth fehl.
Kurzfristiger Workaround
GitLab erlaubt aktuell noch, für eine Top-Level-Gruppe wieder auf das bisherige Legacy-Format der CI/CD Job Tokens zurückzustellen.
Unter:
Settings → CI/CD → General pipelines
kann dafür
Enable JWT format for CI/CD job tokens
vorübergehend deaktiviert werden.
Damit sollte die bestehende Kaniko-Pipeline zunächst wieder funktionieren.
Das Legacy-Format ist allerdings nur eine Übergangslösung und wird mit GitLab 20 entfernt.
DauerhafteLösung
Die Pipeline sollte daher auf die neuen JWT-basierten Job Tokens angepasst werden.
Bei Kaniko muss insbesondere darauf geachtet werden, dass die Registry-Credentials korrekt in /kaniko/.docker/config.json geschrieben werden. Durch die deutlich längeren JWT-Tokens darf das Base64-Encoding keinen Zeilenumbruch erzeugen, beispielsweise:
- |
cat > /kaniko/.docker/config.json <<EOF
{
"auths": {
"${CI_REGISTRY}": {
"username": "${CI_REGISTRY_USER}",
"password": "${CI_REGISTRY_PASSWORD}"
}
}
}
EOF