~/CodeBlog.at

Ein halbkreativer Entwickler über alles zwischen C# und TYPO3.

Private Composer Packages mit Gitlab 14.10

Mein aktuelles (Stand April 2022) Deployment sieht folgendermaßen aus:

Mit jedem Commit ins Gitlab startet ein Gitlab-Runner einen Docker-Container mit dem Image von t3easy (https://hub.docker.com/r/t3easy/surf/, an dieser Stelle herzlichen Dank an Jan für das Docker Image!) und zieht sich das Projekt in den Container, baut mir die Assets für das Frontend zusammen (derzeit via NPM, bessere Lösungen immer willkommen) und führt ein composer install aus. Danach wird das ganze Projekt von TYPO3 Surf über rsync auf den Zielserver gespielt. Natürlich sind noch kleinere Schritte dazwischen und danach dabei, aber im Großen und Ganzen ist das aber die ganze Magie dahinter.

Problem:

Bis gestern Mittag hat das alles auch problemlos funktioniert. Danach kam das Update von Gitlab von 14.09 auf 14.10. Seitdem konnte er meine Extensions nicht mehr aus den privaten composer packages laden.

Fehlermeldung war folgende:

- Downloading websailor/extension (2.2.0) Failed to download websailor/extension from dist: Could not authenticate against gitlab.domain.com. Now trying to download from source.

Und das bei jeder meiner Extensions. Nach einiges Stunden an debugging konnte ich den Fehler zwar eingrenzen, aber nicht direkt identifizieren bzw. zuordnen. Entweder hat sich hier in Gitlab was geändert. In den Changelogs hab ich allerdings nichts passendes gefunden. Oder es hat mit Composer zu tun. Den Rest hätte ich mal ausgeschlossen, da ich ja sonst nichts verändert habe. Auch das Docker Image ist das selbe geblieben:

t3easy/surf:2-php7.4-composer2-node16

Lösung:

Ich hab die ganzen TYPO3 Extensions in einer eigenen Gruppe drinnen. In dieser Gruppe hab ich dann im Gitlab einen Deploy Token mit dem Username gitlab-runner erstellt und diesen Token hinterlege ich nun im Projekt unter Settings > CI/CD bei den anderen Variablen. Name der Variable ist COMPOSER_AUTH und der Inhalt schaut so aus:

{"gitlab-token": {"gitlab.domain.com": {"username": "gitlab-runner", "token": "XXX"}}}

Danach konnte der Docker-Container wieder auf die Extensions zugreifen und diese auschecken.

Problem gelöst.

PS: Eine gute Erklärung wie das mit den Privaten Composer Packages geht, findet man übrigens hier:
https://php.watch/articles/composer-gitlab-repositories