CI Systeme für Forgejo

  • Moin,

    ich bin etwas "verloren" bei der Suche nach einem CI System für Forgejo, daher möchte ich hier einfach mal nach Erfahrungen und Meinungen fragen.

    Zu meiner Situation: Ich habe eine GitLab Instanz und nutze dort sehr aktiv GitLab CI. Konkret habe ich ein Repository nur für CICD-Templates, welches quasi eine große, automatische Pipeline enthält, die über diverse Regeln immer das tut, was in einem Projekt erforderlich ist. Diese Pipeline wird zentral gepflegt und ist in jedem Projekt eingebunden.

    Jetzt habe ich mir eine Forgejo Instanz aufgebaut und würde gerne auch zu Forgejo wechseln, da es im Vergleich zu GitLab viel performanter ist, weniger Leistung in Anspruch nimmt und auch vom UI her deutlich angenehmer in der Benutzung ist. Auf der Forgejo Instanz möchte ich natürlich auch CI nutzen, am liebsten mit der selben Vorgehensweise wie bisher. Allerdings basiert Forgejo Actions auf mehr oder minder auf GitHub Actions und ist für meinen Geschmack furchtbar in der Benutzung. Dinge wie "Hier ist mein Docker Image und da sind meine Befehle zum Ausführen" ist nur sehr umständlich bis gar nicht machbar. Es gibt zwar viele fertige Actions, allerdings maintaine ich meine CI Job/Pipeline Definitionen schon ganz gerne selbst und ziehe sie nur ungern von extern an.

    Als Alternativen sind mir aktuell Woodpecker CI und Drone CI bekannt (Gibt es noch andere, die Forgejo/Gitea kompatibel sind?). Woodpecker CI kann scheinbar gar keine Templates und Includes, zumindest finde ich nichts dazu in der Dokumentation (Oder geht es doch?). Was Drone CI betrifft - das hat einen recht faden, kommerziellen Beigeschmack und bietet zumindest offiziell nur Support für Gitea - die Syntax habe ich mir hier bisher noch nicht angeschaut. Prinzipiell aber immer noch ein Kandidat mit Potenzial.

    Nun bin ich auf eure Meinungen und Erfahrungen gespannt... vielleicht finde ich ja damit einen für mich passenden Weg.

    "Denn der radikalste Zweifel ist der Vater der Erkenntnis."

    -Max Weber

  • Guten Abend,

    ich war früher auch bei Gitlab, nach den groben Einscrhänkungen im Free Tier, und bin über Gitea auf Forgejo gewechselt. Alle meine Repos sind gespiegelt. Zuerst hatte ich Drone CI sowohl mit Gitlab als auch mit Gitea im Einsatz. Letztendlich war es aber immer ein "externes" System und die Entwicklung ist auch etwas eingeschlafen. Woodpecker ist ein Fork von Drone.

    Die derzeitige CI Situation sieht schon wesentlich besser aus als es noch vor kurzem der Fall war. Da ich auf der Arbeit auch Github Actions nutze, sind die Synergie Effekte sehr groß. Ich nutze teils öffentliche Actions, teils hab ich mir mittlerweile aber auch welche selber geschrieben für Tasks, welche ich in jedem Repo habe.

    Zitat


    Hier ist mein Docker Image und da sind meine Befehle zum Ausführen

    Ja, ein sehr leidiges Thema in Actions. Und nein, ich will nicht nodejs in allen meinen Containern installieren... Als "Workaround" hab ich ne Abwandlung von https://github.com/addnab/docker-run-action im Einsatz. Was ich mag, ich kann als Backup System einfach die offiziellen Github Runner missbrauchen, ohne viel neuen Code zu schreiben. Das mache ich bspw. bei Cross Architecture Builds mit Rust so.

    Warum ich nicht "nur" Github nutze: Es gibt gewisse Einschränkungen wie dass die CI sich nach 60 Tagen ohne Commit deaktiviert und so. Diese "Empty" Commit Bots dagegen als Lösung finde ich nicht prickelnd...

    Gruß

  • Hey,

    vielen Dank für diese ausführliche Rückmeldung! :)

    Woodpecker ist ein Fork von Drone.

    Das wusste ich gar nicht, erspart mir aber da nochmal Recherchearbeit.

    Letztendlich war es aber immer ein "externes" System

    Das ist es auch, was mich von einem externen Tooling abschreckt. Aber wenn die "Language" da besser ist, würde ich es vermutlich auf mich nehmen. ^^

    Als "Workaround" hab ich ne Abwandlung von https://github.com/addnab/docker-run-action im Einsatz.

    Das ist ein guter Tipp, danke dafür. Darf ich fragen, was du daran abgeändert/abgewandelt hast?

    Warum ich nicht "nur" Github nutze: Es gibt gewisse Einschränkungen wie dass die CI sich nach 60 Tagen ohne Commit deaktiviert und so. Diese "Empty" Commit Bots dagegen als Lösung finde ich nicht prickelnd...

    Das ist tatsächlich für mich gar kein so großes Problem. Ich nutze eine selbst geschrieben Ansible Rolle, um mir die Forgejo Runner auf einer lokalen VM zu deployen, wie ich sie brauche und habe auch genug Leistung "vorrätig", um alle Jobs selbst abzuarbeiten.

    "Denn der radikalste Zweifel ist der Vater der Erkenntnis."

    -Max Weber

  • Das ist ein wirklich interessantes Thema. Ich bin momentan bei Gitea + Gitea Actions. Dass die Lösung im Grunde eine Kopie von Github Actions ist, finde ich persönlich eher als Vorteil, weil es einem eine sehr große Auswahl an Actions/Modulen zur Verfügung stellt, die man meist problemlos 1:1 nutzen kann. Die entsprechenden Build Container kann man auch gut selbst bauen und die Repos im Zweifel auch bei sich auf der Instanz spiegeln, falls man diese nicht direkt von Github ziehen möchte.

    Ich hadere selbst nur etwas mit der internen Package Registry (z.B. für Container). Die ist bei Gitea/Forgejo doch etwas sehr rudimentär und wenig flexibel. Da überlege ich noch, ob ich mir nicht noch eine dedizierte Harbor Instanz aufsetze um zumindest das zu trennen. Denn die Berechtigungen sind hier nicht so schön gelöst wie z.B. bei Gitlab. Ein Runner kann nicht automatisch in die Registry pushen. Dafür braucht es dann extra Credentials, die als Variablen hinterlegt werden müssen. Wenn ich das aber eh machen muss, kann ich auch eine externe Registry nutzen.

    Aber insgesamt bin ich schon zufrieden mit der CI Implementation, gerade weil es einfach mitkommt und mich sich nicht direkt noch Gedanken um eine weitere Komponente machen muss (+ Usermanagement).

    Wenn ich mir ein externes CI Tool anschauen müsste, würde ich vermutlich eher Richtung Jenkins tendieren. Entsprechende Gitea (Forgejo) Plugins gibt es dafür auch. Drone & Co sind für mich dann eher einfache Tools, die im Endeffekt wenig Mehrwert gegenüber der integrierten Actions Lösung bieten. Das ist aber nur mein persönlicher Eindruck.

  • Hey,

    vielen Dank für diese ausführliche Rückmeldung! :)

    Bitte sehr.

    | Das ist ein guter Tipp, danke dafür. Darf ich fragen, was du daran abgeändert/abgewandelt hast?

    Habe noch ein bisschen Debug drum rum gebaut , dass ich den ausgeführten Befehl / Argumente sehe und der aktuelle Workspace bei default immer mit gemounted wird im Container.

    Ich deploye den Forgejo Runner auch per Ansible.