finished gitlab
This commit is contained in:
parent
0e45640871
commit
9732eff09a
14 changed files with 558 additions and 66 deletions
|
@ -1,18 +1,21 @@
|
|||
# Selfhosting von Open-Source-Entwicklertools
|
||||
|
||||
Um effizient an Open-Source-Projekten arbeiten zu können, benötigt man eine
|
||||
Git-Hosting-Plattform. Diese erlaubt es einem, seinen Code zu veröffentlichen und mit
|
||||
anderen Personen über das Internet zusammenzuarbeiten. Andere Nutzer und Entwickler
|
||||
können Softwarefehler melden, Vorschläge für neue Features machen und neuen Code zum
|
||||
Projekt beitragen.
|
||||
Um effizient mit anderen Entwicklern an Open-Source-Projekten arbeiten zu können, muss
|
||||
man den Quellcode seines Projekts veröffentlichen, Aufgaben koordinieren und neue
|
||||
Codebeiträge entgegen nehmen.
|
||||
|
||||
Hierbei kommt fast immer eine Git-Hosting-Plattform zum Einsatz. Diese erlaubt es einem,
|
||||
sein Repository zu veröffentlichen und mit anderen Personen über das Internet
|
||||
zusammenzuarbeiten. Andere Nutzer und Entwickler können Softwarefehler melden,
|
||||
Vorschläge für neue Features machen und neuen Code zum Projekt beitragen.
|
||||
|
||||
Der meistgenutzte Git-Hosting-Anbieter ist GitHub. Die Plattform wurde von Tom
|
||||
Preston-Werner, Chris Wanstrath, P. J. Hyett and Scott Chacon gegründet und ging 2008
|
||||
ans Netz. 2018 wurde die Firma von Microsoft übernommen.
|
||||
|
||||
Der große Vorteil von GitHub ist, dass der Dienst für öffentliche Projekte vollkommen
|
||||
kostenlos ist. Zudem hat der Dienst mit der am Abstand größten Zahl von Nutzern auch die
|
||||
meisten potenziellen Beitragenden.
|
||||
kostenlos ist. Zudem hat der Dienst mit 100 Millionen Nutzern die mit Abstand größte
|
||||
Community an potenziellen Beitragenden.
|
||||
|
||||
GitHub bietet auch einen Continuous-Integration-Dienst namens GitHub Actions an, mit dem
|
||||
man sein Projekt automatisch testen und veröffentlichen lassen kann. Im Gegensatz zu
|
||||
|
@ -29,13 +32,17 @@ ausschließen.
|
|||
Beispielsweise wurde der russische Webentwickler Nikolay Kuchumov wegen eines einzigen
|
||||
beleidigenden Issues
|
||||
[2020 auf GitHub gesperrt](https://medium.com/@catamphetamine/how-github-blocked-me-and-all-my-libraries-c32c61f061d3).
|
||||
Dabei wurden alle seine Repositories entfernt. Noch absurder: GitHub verlangte eine
|
||||
Kopie seines Personalausweis um die Sperre wieder aufzuheben.
|
||||
Dabei wurden alle seine Repositories von der Plattform entfernt. Noch absurder: GitHub
|
||||
verlangte eine Kopie seines Personalausweis um die Sperre wieder aufzuheben.
|
||||
|
||||
Es gibt auch zahlreiche Bespiele von Open Source-Projekten, die von GitHub wegen
|
||||
Verstößen gegen ihre Nutzungsbedingungen oder DMCA-Reports gesperrt wurden. Das
|
||||
prominenteste Beispiel hierfür ist der Video-Downloader
|
||||
Es gibt auch einige Fälle von Open Source-Projekten, die von GitHub wegen angeblichen
|
||||
Verstößen gegen das amerikanische Urheberrecht (DMCA) gesperrt wurden. Das prominenteste
|
||||
Beispiel hierfür ist der Video-Downloader
|
||||
[youtube-dl](github.blog/2020-11-16-standing-up-for-developers-youtube-dl-is-back/).
|
||||
Auch das Repository der alternativen Smartwatch-App
|
||||
[Gadgetbridge](https://www.heise.de/news/Pebble-Gadgetbridge-unter-Beschuss-3740625.html)
|
||||
wurde zeitweise von GitHub gesperrt. Eine selbstgehostete Plattform ist dagegen viel
|
||||
schwieriger zu sperren.
|
||||
|
||||
Ein weiterer Grund für einige Entwickler, die GitHub-Plattform zu verlassen, ist die
|
||||
Einführung von GitHub Copilot. Hierbei handelt es sich um ein künstliche Intelligenz,
|
||||
|
@ -45,11 +52,11 @@ hierbei eine Urheberrechtsverletzung, da der AI-generierte Code Schnipsel aus de
|
|||
Trainingsdaten enthalten kann, die dann ohne Erwähnung des Urhebers in andere Projekte
|
||||
eingefügt werden.
|
||||
|
||||
Insbesondere bei privaten oder firmeninternen Projekten kann auch Datenschutz ein Grund
|
||||
sein, auf Webanwendungen von Fremdanbietern (insbesondere im Ausland) zu verzichten und
|
||||
die Daten auf eigenen Servern zu speichern. Da GitHub nicht quelloffen ist und nur mit
|
||||
einer kostspieligen Enterprise-Lizenz selbst gehostet werden kann, ist is für solche
|
||||
Fälle attraktiv, eine Open-Source-Anwendung einzusetzen.
|
||||
Insbesondere bei privaten oder firmeninternen Projekten kann auch der Datenschutz ein
|
||||
Grund sein, auf Webanwendungen von Fremdanbietern zu verzichten und die Daten auf
|
||||
eigenen Servern zu speichern. Da GitHub nicht quelloffen ist und nur mit einer
|
||||
kostspieligen Enterprise-Lizenz selbst gehostet werden kann, ist is für solche Fälle
|
||||
attraktiv, eine Open-Source-Anwendung einzusetzen.
|
||||
|
||||
Mittlerweile gibt es mehrere Open-Source-Projekte, die Alternativen zu GitHub entwickelt
|
||||
hat. Im Gegensatz zu proprietären Webdiensten lassen sich diese Anwendungen auf eigenen
|
||||
|
@ -59,6 +66,9 @@ In dieser Arbeit werde ich vier von ihnen testen und vergleichen.
|
|||
|
||||
## Testkriterien
|
||||
|
||||
Ich habe jede Plattform auf meinem Rechner installiert und nach folgenden Kritierien
|
||||
getestet:
|
||||
|
||||
0\. Über das Projekt
|
||||
|
||||
Zuerst werde ich einige grundlegende Informationen über die entsprechende Anwendung
|
||||
|
@ -78,9 +88,6 @@ werde hierbei bewerten, wie einfach die Installation vonstatten geht.
|
|||
Monolithisch (d.h. aus einem Dienst) aufgebaute Anwendungen sind in der Regel einfacher
|
||||
einzurichten, bieten aber weniger Flexibilität bei der Skalierung für viele User.
|
||||
|
||||
Zusätzlich bewerte ich, wie gut das Projekt dokumentiert ist und wie schnell man alle
|
||||
relevanten Informationen für die Einrichtung finden kann.
|
||||
|
||||
2\. Systemanforderungen
|
||||
|
||||
Hierbei geht es nicht nur um die unterstützten Betriebssysteme und CPU-Architekturen,
|
||||
|
@ -94,12 +101,33 @@ Ryzen 5700G-Prozessor (16 Threads) und 32GB RAM. Die angegebene CPU-Auslastung b
|
|||
sich auf die ausgelasteten Threads (wie in htop angezeigt), d.h. 100% entspricht einem
|
||||
voll ausgelastetem Thread, 16.000% einem voll ausgelasteten Prozessor.
|
||||
|
||||
Neben dem Ressourcenverbrauch im Leerlauf habe ich auch die CPU-Auslastung unter Last
|
||||
gemessen. Hierfür habe ich das Repository des Linux-Kernels importiert und mir die
|
||||
Versionsgeschichte und die Blame-Ansicht der Makefile im Stammverzeichnis anzeigen
|
||||
lassen.
|
||||
|
||||
3\. Bedienung
|
||||
|
||||
Wie einfach ist die Weboberfläche zu bedienen? Ist es möglich, schnell durch
|
||||
Repositories zu navigieren? Gibt es eine Suchfunktion, um beispielsweise eine bestimmte
|
||||
Funktion im Code zu finden?
|
||||
|
||||
Zudem habe ich dir Unterstützung für verschiedene Dateiformate getestet. Alle
|
||||
Plattformen können Code, Markdown und Textdateien darstellen. Binärdateien können auf
|
||||
diese Weise natürlich nicht dargestellt werden, weswegen einige Plattformen spezielle
|
||||
Viewer für bestimmte Dateitypen mitbringen. Um dies zu testen, habe ich ein Repository
|
||||
mit Dateien in folgenden Formaten angelegt.
|
||||
|
||||
- Bilder (\*.jpg, \*.svg)
|
||||
- Tabellen (\*.csv, \*.xlsx, \*.ods)
|
||||
- Text (\*.rst, \*.tex, \*.docx, \*.odt)
|
||||
- PDF-Dokumente
|
||||
- 3D-Modelle (\*.stl)
|
||||
- Jupyter-Notebooks (\*.ipynb)
|
||||
|
||||
Zum Vergleich: GitHub unterstützt alle diese Dateitypen mit Ausnahme von LaTEX- und
|
||||
MS/Open Office-Dokumenten.
|
||||
|
||||
4\. Import bestehender Projekte
|
||||
|
||||
Eine gute GitHub-Alternative sollte es dem Entwickler ermöglichen, bestehende Projekte
|
||||
|
@ -123,8 +151,9 @@ lässt sie sich mit anderen CI-Diensten integrieren?
|
|||
|
||||
7\. Öffentliche Instanzen
|
||||
|
||||
Gibt es öffentliche Instanzen dieser Anwendung? Wenn ja, wie beliebt sind sie (ungefähre
|
||||
Anzahl an Projekten, einige bekannte Projekte).
|
||||
Nicht jeder möchte den Aufwand betreiben, seine Git-Hosting-Plattform selbst zu hosten.
|
||||
Deswegen ist es vom Vorteil, wenn es die Möglichkeit gibt, anstelle dessen einer
|
||||
öffentlichen Instanz beizutreten.
|
||||
|
||||
## Quellen
|
||||
|
||||
|
|
|
@ -1,17 +1,278 @@
|
|||
# GitLab
|
||||
|
||||
GitLab ist die erste
|
||||
2011, drei Jahre nach dem Start von GitHub veröffentlichten Dmytro Zaporozhets und Sytse
|
||||
Sijbrandij die erste Version von GitLab. Damit ist GitLab die erste und bekannteste
|
||||
Open-Source-Alternative zu GitHub.
|
||||
|
||||
GitLab Community Edition ist unter der MIT-Lizenz veröffentlicht. Die Firma hinter
|
||||
GitLab verfolgt ein "Open Core"-Geschäftsmodell, d.h. einige fortgeschrittene Features
|
||||
sind nicht in der Community Edition enthalten und erfordern die proprietären Versionen
|
||||
"Premium" bzw. "Ultimate". Diese sind nur in Form eines Abonnements zum Preis von 29
|
||||
(Premium) bzw. 99USD (Ultimate) pro Nutzer und Monat erhältlich. Open-Source-Projekte
|
||||
und Bildungseinrichtungen können die Ultimate-Version kostenfrei nutzen.
|
||||
|
||||
Im Kern ist GitLab eine Ruby-on-Rails-Webanwendung. Allerdings sind einige Funktionen
|
||||
der Plattform (bspw. SSH oder Git-Operationen) an zusätzliche Services ausgelagert. Die
|
||||
meisten dieser Services sind in Go implementiert. Das Webfrontend wurde mit Vue.js
|
||||
implementiert.
|
||||
|
||||
<img src="./assets/gitlab/architecture.png" alt="GitLab Architektur" width="500"/>
|
||||
|
||||
- **Workhorse** Reverse Proxy, der HTTP-Anfragen an Git oder die Hauptanwendung
|
||||
weiterleitet
|
||||
- **Gitaly** Microservice zur Speicherung der Git-Repositories und Verarbeitung von
|
||||
Git-Anfragen
|
||||
- **GitLab Shell** SSH-Server
|
||||
- **Sidekiq** Task Queue zur Ausführung von Aufgaben im Hintergrund
|
||||
|
||||
GitLab verwendet eine PostgreSQL-Datenbank zur Speicherung seiner Daten. Zudem kommt
|
||||
eine Redis-Instanz als Cache und Event Queue zum Einsatz.
|
||||
|
||||
Getestet wurde GitLab in der Version 16.1.1.
|
||||
|
||||
## Installation
|
||||
|
||||
Um die Installation der Anwendung trotz ihres Aufbaus aus verschiedenen Services zu
|
||||
vereinfachen, stellt GitLab ein Omnibus-Paket zur verfügung. Hierbei handelt es sich um
|
||||
ein Linux-Softwarepaket, das die gesamte GitLab-Anwendung mit allen Services (inklusive
|
||||
NGINX, Redis und Postgres) beinhalten. Die Pakete sind für die meisten
|
||||
Linux-Distributionen (Ubuntu, Debian, Alma Linux, CentOS, OpenSUSE, Raspberry Pi OS)
|
||||
verfügbar.
|
||||
|
||||
Um Gitlab als Omnibus-Paket zu installieren, muss man zuerst das Gitlab-Repository zu
|
||||
seinem System hinzufügen. Hierfür kann man dieses Skript verwenden:
|
||||
<https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh>.
|
||||
|
||||
Danach kann man GitLab mit diesem Befehl installieren und starten:
|
||||
|
||||
```
|
||||
GITLAB_ROOT_PASSWORD="<strongpassword>" EXTERNAL_URL="http://gitlab.example.com" apt install gitlab-ce
|
||||
```
|
||||
|
||||
Der Konfigurationsprozess dauert mehrere Minuten. Wenn der Webserver gestartet ist, kann
|
||||
man die Weboberfläche aufrufen und sich anmelden (Benutzername: `root`).
|
||||
|
||||
GitLab stellt auch ein Docker-Image (`gitlab/gitlab-ce`) zur Verfügung, welches das
|
||||
Omnibus-Paket beinhaltet. Der Einrichtungsprozess ist der gleiche wie bei einer bare
|
||||
metal-Installation, mit dem Unterschied dass die Konfiguration durch die
|
||||
Umgebungsvariable `GITLAB_OMNIBUS_CONFIG` erfolgt.
|
||||
|
||||
[Hier](./assets/gitlab/docker-compose.yml) ist die Docker-Compose-Datei, die ich für
|
||||
meine Testinstallation verwendet habe.
|
||||
|
||||
Für Unternehmen und große Organisationen mit Tausenden Nutzern bietet GitLab in ihrer
|
||||
Dokumentation auch Referenzarchitekturen für hochverfügbare Systemen mit mehreren
|
||||
Servern.
|
||||
|
||||
## Systemanforderungen
|
||||
|
||||
GitLab bietet Pakete für eine
|
||||
[Vielzahl von Linux-Distributionen](https://docs.gitlab.com/ee/administration/package_information/supported_os.html),
|
||||
sowohl für Intel/AMD als auch für ARM-Prozessoren. Das offizielle Docker-Image ist
|
||||
jedoch nur für die arm64-Architektur verfügbar.
|
||||
|
||||
GitLab hat unter allen getesteten Plattformen den höchsten Ressourcenverbrauch.
|
||||
|
||||
Im Leerlauf bewegt sich die CPU-Last auf meinem Testsystem zwischen 3 und 30 Prozent.
|
||||
Der Arbeitsspeicherverbrauch beträgt ganze 6GB.
|
||||
|
||||
Aufwändige Git-Operationen können Lastspitzen über 100% für eine Dauer von bis zu 5
|
||||
Sekunden pro Anfrage verursachen.
|
||||
|
||||
GitLab erwähnt in ihrer Dokumentation, dass man die Konfiguration anpassen kann, um den
|
||||
Ressourcenverbrauch etwas zu senken. Nachdem ich diese Zeilen zur Konfigurationsdatei
|
||||
hinzugefügt habe, sank der Speicherbedarf auf 2.8GB und die CPU-Auslastung auf 1-12%.
|
||||
|
||||
```
|
||||
# Reduce the number of running workers to the minimum in order to reduce memory usage
|
||||
puma['worker_processes'] = 2
|
||||
sidekiq['max_concurrency'] = 9
|
||||
# Turn off monitoring to reduce idle cpu and disk usage
|
||||
prometheus_monitoring['enable'] = false
|
||||
```
|
||||
|
||||
Für eine Installation auf Single Board-Computern und kleinen V-Servern ist der
|
||||
Speicherverbrauch jedoch weiterhin zu hoch. GitLab gibt als Mindestanforderung 4
|
||||
CPU-Kerne und 4GB RAM an.
|
||||
|
||||
## Bedienung
|
||||
|
||||
Gitlab's Weboberfläche wurde mit dem VueJS-Framework realisiert. Die gesamte
|
||||
Weboberfläche wird somit clientseitig mittels JavaScript gerendert. Dies erlaubt eine
|
||||
äußerst flüssige Navigation durch die Webseite, da die Seite nicht bei jedem
|
||||
Navigationsschritt neu geladen wird. Der Nachteil dieser Lösung: Javascript ist für die
|
||||
Darstellung der Webseite zwingend erforderlich.
|
||||
|
||||
GitLab bietet die Möglichkeit, den Code eines Repositories zu durchsuchen. Die
|
||||
Verwendung einer externen Elasticsearch-Instanz für die Suche und die Möglichkeit, die
|
||||
gesamte Gitlab-Instanz zu durchsuchen, ist allerdings den kostenpflichtigen Versionen
|
||||
vorbehalten.
|
||||
|
||||
GitLab unterstützt in der Standardkonfiguration die meisten Dateiformate unter den
|
||||
getesteten Plattformen. Auf der Weboberfläche können Bilder, CSV-Tabellen, PDF-Dokumente
|
||||
und stl-Modelle betrachtet werden, alternative Markupsprachen wie Restructured Text
|
||||
werden ebenfalls unterstützt. Es gibt sogar die Möglichkeit, GeoJSON-Dateien (Listen von
|
||||
GPS-Standorten) auf einer OpenStreetMap-Karte darzustellen.
|
||||
|
||||
Eine Besonderheit der Gitea-Weboberfläche stellt die Web-IDE dar. GitLab verfügt über
|
||||
eine modifizierte Version von Visual Studio Code, mit der man direkt im Browser an
|
||||
seinen Projekten arbeiten kann.
|
||||
|
||||

|
||||
|
||||
## Import bestehender Projekte
|
||||
|
||||
GitLab erlaubt den Projektimport von GitHub, Bitbucket, FogBugz, Gitea sowie von anderen
|
||||
GitLab-Instanzen.
|
||||
|
||||
Die Importfunktion ist standardmäßig deaktiviert und muss erst in der _Admin Area_
|
||||
aktiviert werden (_Settings_ \> _General_ \> _Visibility and access controls_ \> _Import
|
||||
sources_).
|
||||
|
||||
Für den Import von GitHub-Projekten muss man sich mit einem Access Token anmelden und
|
||||
bekommt anschließend eine Übersicht aller Repositories angezeigt. Hier kann man
|
||||
auswählen, welche Repositories übertragen werden sollten. Der Import umfasst auch
|
||||
Issues, Pull Requests und Releases.
|
||||
|
||||

|
||||
|
||||
Als einzige Plattform im Test bietet GitLab die Möglichkeit, ein Repository mit
|
||||
sämtlichen gespeicherten Daten als zip-Datei zu exportieren. Dies erlaubt nicht nur den
|
||||
Import auf anderen Instanzen sondern bietet dem Nutzer auch eine Backup-Option.
|
||||
|
||||
## Zusatzfeatures
|
||||
|
||||
GitLab hat von allen getesteten Plattformen die meisten Features. Einige Features sind
|
||||
jedoch der proprietären Premium/Ultimate Edition vorbehalten, die ich nicht getestet
|
||||
habe.
|
||||
|
||||
Die Projektmanagement-Features von GitLab sind die besten im Test. GitLab erlaubt das
|
||||
Erstellen von Issues mit Labels, Verantwortlichen, Fälligkeitsterminen und geleisteter
|
||||
Arbeitszeit. Zudem können Issues zu Meilensteinen hinzugefügt werden.
|
||||
|
||||
Issue Boards erlauben einen schnellen Überblick über den alle gerade bearbeiteten
|
||||
Issues. Es lassen sich Spalten erstellen, die Issues mit einem bestimmten Tag auflisten.
|
||||
Erstellt man also z.B. zwei Tags: "Implementierung" und "Review" und legt in seinem
|
||||
Board zwei Spalten hierfür an, erhält man eine Übersicht über den Fortschritt aller
|
||||
Issues. Issues lassen sich zwischen Spalten verschieben, wodurch sich auch die Tags des
|
||||
Issues ändern.
|
||||
|
||||

|
||||
|
||||
Ein interessantes Feature ist die Möglichkeit, zu einem Issue mehrere Tasks
|
||||
hinzuzufügen. Tasks sind Sub-Issues, die ihre eigene Beschreibung und Diskussion haben,
|
||||
aber unter einem Issue zusammengefasst sind. Auf diese Weise lassen sich große Features
|
||||
in kleinere Arbeitsschritte aufteilen, die von verschiedenen Teammitgliedern erledigt
|
||||
werden können.
|
||||
|
||||

|
||||
|
||||
Viele fortgeschrittene Projektmanagement-Features sind allerdings der Enterprise Edition
|
||||
vorbehalten. Hierzu gehört z.B. das Anlegen von Boards mit Filtern (z.B. für einen
|
||||
bestimmten Meilenstein) oder Aufwandsschätzungen.
|
||||
|
||||
Um Projekte zu dokumentieren bietet GitLab ein auf Git und Markdown basierendes Wiki.
|
||||
Zudem gibt es mit "Snippets" einen Pastebin, der ebenfalls Git zur Speicherung der
|
||||
Codeschnipsel verwendet.
|
||||
|
||||
Es gibt auch die Möglichkeit, mit GitLab statische Webseiten zu hosten. Die Seiten
|
||||
können mit GitLab CI gebaut und unter einer persönlichen Subdomain veröffentlicht
|
||||
werden.
|
||||
|
||||
GitLab bietet auch eine Paketregistry für Bibliotheken verschiedener Programmiersprachen
|
||||
(z.B. Maven, npm, Python) an. Die Unterstützung für einige Programmiersprachen wie Ruby
|
||||
ist allerdings noch experimentell. \*.deb-Pakete sowie Docker-Images können ebenfalls
|
||||
mit GitLab gehostet werden.
|
||||
|
||||
Zur einfachen Bedienung mit der Kommandozeile bietet GitLab das Tool `glab` an. Damit
|
||||
lassen sich beispielsweise Issues und Pull Requests erstellen und bearbeiten, Snippets
|
||||
hochladen und CI-Build starten. Es gibt auch ein offizielles VS-Code-Plugin, das
|
||||
Pull-Requests, Issues und CI-Builds in den Texteditor integriert.
|
||||
|
||||
## Continous Integration
|
||||
|
||||
Gitlab verfügt über ein eingebautes CI-System, um Software automatisiert zu testen und
|
||||
zu veröffentlichen. Das System kann Builds in Docker-Containern, auf einem
|
||||
Kubernetes-Cluster, in einer VirtualBox-Maschine oder ohne Virtualisierung ausführen.
|
||||
Hierfür verwendet Gitlab ein verteiltes System aus Runnern. Die Runner kommunizieren
|
||||
über das Internet mit der Gitlab-Instanz und können so neue Buildaufträge
|
||||
entgegennehmen.
|
||||
|
||||
Um einen Runner einzurichten, muss man zuerst die erforderliche Konfigurationsdatei
|
||||
erstellen. Hierfür startet man den Runner mit dem Befehl `register`:
|
||||
|
||||
```
|
||||
docker run --rm -it -v $(pwd)/runner-config:/etc/gitlab-runner gitlab/gitlab-runner register
|
||||
```
|
||||
|
||||
Daraufhin fragt der Runner nach der URL der Gitlab-Instanz und einem
|
||||
Registrierungstoken. Den Token kann man sich entweder in den Repository-Einstellungen
|
||||
oder in der Admin-Oberfläche generieren lassen (je nachdem, ob man den Runner nur zu
|
||||
einem Projekt oder der gesamten Instanz hinzufügen möchte). Anschließend muss man
|
||||
festlegen, wie der Runner die Builds ausführen sollte. In meinem Test habe ich den
|
||||
`docker`-Executor gewählt.
|
||||
|
||||
Wenn die Konfiguration abgeschlossen ist, kann man den Runner mit diesem Befehl starten
|
||||
|
||||
```
|
||||
docker run --rm -it -v $(pwd)/runner-config:/etc/gitlab-runner gitlab/gitlab-runner
|
||||
```
|
||||
|
||||

|
||||
|
||||
Anschließend kann man für sein Repository einen Build definieren. Hierfür muss man eine
|
||||
Datei mit dem Namen `.gitlab-ci.yml` im Wurzelverzeichnes des Repositories erstellen, in
|
||||
der die einzelnen Schritte des Builds beschrieben werden. GitLab stellt ein Repository
|
||||
mit Beispielen für verschiedene Programmiersprachen und Frameworks zur Verfügung, um den
|
||||
Einstieg zu erleichtern.
|
||||
|
||||
```yml
|
||||
image: "rust:latest"
|
||||
|
||||
test:cargo:
|
||||
script:
|
||||
- rustc --version && cargo --version # Print version info for debugging
|
||||
- rustup component add rustfmt clippy
|
||||
- cargo fmt --all --check
|
||||
- cargo clippy --all --features=rss -- -D warnings
|
||||
- cargo test --features=rss --workspace
|
||||
```
|
||||
|
||||
## Öffentliche Instanzen
|
||||
|
||||
Gitlab betreibt selbst eine öffentliche Instanz der proprietären Ultimate-Version unter
|
||||
[gitlab.com](https://gitlab.com/explore/).
|
||||
|
||||
Daneben gibt es eine Vielzahl von communitybetriebenen GitLab-Instanzen, die die freie
|
||||
Community Edition verwenden. Viele große Open-Source-Projekte und Organisationen hosten
|
||||
eine eigene GitLab-Instanz, wie zum Beispiel [Debian](https://salsa.debian.org),
|
||||
[Framasoft](https://framagit.org/public/projects/) oder [KDE](https://invent.kde.org).
|
||||
|
||||
## Fazit
|
||||
|
||||
GitLab ist zu Recht seit mehr als zehn Jahren die führende quelloffene
|
||||
GitHub-Alternative. Mittlerweile bietet GitLab mehr Features als die Konkurrenz von
|
||||
Microsoft.
|
||||
|
||||
Trotz seiner komplexen Architektur lässt sich GitLab relativ einfach und schnell
|
||||
installieren, da das Omnibus-Paket die einzelnen Dienste automatisch konfiguriert.
|
||||
|
||||
Insbesondere Unternehmen und große Organisationen werden die professionellen Features
|
||||
und den kommerziellen Support zu schätzen wissen.
|
||||
|
||||
Darüber hinaus bietet Gitlab selbst in der Open-Source-Version die besten
|
||||
Projektmanagement-Features im Test. Wer also keine separate Projektmanagement-Anwendung
|
||||
einsetzen möchte, ist mit Gitlab ebenfalls gut beraten.
|
||||
|
||||
Wer seine Plattform allerdings auf einem kleinen Single Board Computer oder V-Server
|
||||
betreiben möchte, sollte sich dagegen nach einer leichtgewichtigeren Alternative
|
||||
umsehen.
|
||||
|
||||
## Quellen
|
||||
|
||||
- Dokumentation <https://docs.gitlab.com/>
|
||||
- Repository <https://gitlab.com/gitlab-org/gitlab-foss/>
|
||||
- Architekturübersicht
|
||||
<https://docs.gitlab.com/ee/development/architecture.html#gitlab-architecture-overview>
|
||||
- Liste von öffentlichen GitLab-Instanzen
|
||||
<https://wiki.p2pfoundation.net/List_of_Community-Hosted_GitLab_Instances>
|
||||
|
|
|
@ -1,16 +1,96 @@
|
|||
# Gitea
|
||||
|
||||
Das Gitea-Projekt begann 2016 als Fork der Git-Hosting-Plattform Gogs. Lunny Xiao, einer
|
||||
der Beitragenden von Gogs, war damit unzufrieden, dass der Gründer des Projekts, Joe
|
||||
Chen, das Projekt alleine betreuen und keine weiteren Maintainer ernennen wollte.
|
||||
|
||||
2022 gründete Lunny Xiao die Firma Gitea Limited. Die Firma bietet Unternehmen Hosting-
|
||||
und Supportdienstleistungen für Gitea an. Da einige Mitglieder der Community einem
|
||||
kommerziell geleiteten Open-Source-Projekt misstrauen, entstand ein neuer Fork names
|
||||
Forgejo. Forgejo steht unter der Leitung von Codeberg, einem Berliner Verein, der seit
|
||||
2018 eine öffentliche Gitea-Instanz betreibt. Abgesehen von Design- und Namensänderungen
|
||||
unterscheidet sich Forgejo von Gitea momentan kaum.
|
||||
|
||||
Gitea ist in Go geschrieben und besteht aus einer einzigen ausführbaren Datei.
|
||||
Standardmäßig verwendet Gitea eine interne SQLite-Datenbank, alternativ werden auch
|
||||
externe Datenbanken (MySQL, MariaDB, Postgres, MS SQL) unterstützt.
|
||||
|
||||
Getestet wurde die Version 1.20.0rc0.
|
||||
Die Weboberfläche wied serverseitig mit Templates gerendert. Einige Websitekomponenten
|
||||
wie z.B. Drop-Down-Menüs erfordern JavaScript.
|
||||
|
||||
Getestet wurde die Version 1.20.0-rc2.
|
||||
|
||||
## Installation
|
||||
|
||||
Gitea stellt kompilierte Binaries für alle gängigen Betriebssysteme unter
|
||||
<https://dl.gitea.com/gitea/> zur Verfügung. Von dort aus lässt sich die Anwendung
|
||||
einfach herunterladen und starten.
|
||||
|
||||
Alternativ gibt es auch [offizielle](https://pkgs.org/download/gitea) und
|
||||
[inoffizielle](https://gitea.com/gitea/awesome-gitea/src/branch/main/README.md#user-content-packages)
|
||||
Pakete für die meisten Linux-Distributionen.
|
||||
|
||||
Darüber hinaus stellt Gitea auch ein Docker-Image (`gitea/gitea`) zur Verfügung.
|
||||
|
||||
Die Einrichtung ist extrem simpel. Beim ersten Start wird diese Konfigurationsseite
|
||||
angezeigt, auf der man die grundlegenden Einstellungen (z.B. Datenbank-URL,
|
||||
Admin-Passwort) vornehmen kann. Nach der Bestätigung ist Gitea in wenigen Sekunden
|
||||
bereit zur Verwendung.
|
||||
|
||||

|
||||
|
||||
Dieser Konfigurationsassistent wird jedoch nur beim ersten Start angezeigt. Alle
|
||||
weiteren Konfigurationsänderungen müssen durch die
|
||||
`app.ini`-[Konfigurationsdatei](https://docs.gitea.com/1.20/administration/config-cheat-sheet)
|
||||
erfolgen. Gitea verfügt zwar über eine Admin-Oberfläche, diese dient allerdings
|
||||
hauptsächlich der Nutzerverwaltung und erlaubt keine Konfigurationsänderungen.
|
||||
|
||||
## Systemanforderungen
|
||||
|
||||
Gitea ist auf jedem Betriebssystem und jeder CPU-Architektur lauffähig, die von der
|
||||
Programmiersprache Go unterstützt wird. Binaries für MacOS (amd64/aarch64), FreeBSD
|
||||
(amd64), Windows (i386/amd64) und Linux (i386/amd64/arm5/arm6/aarch64) werden offiziell
|
||||
zum Download angeboten. Das offizielle Docker-Image ist für die amd64- und
|
||||
aarch64-Architektur verfügbar.
|
||||
|
||||
Im Leerlauf benötigt der Server ca. 150MB Arbeitsspeicher und verursacht unter 0.1%
|
||||
CPU-Auslastung. Damit ist Gitea die mit Abstand leichtgewichtigste Plattform in Test und
|
||||
eignet sich perfekt für den Einsatz auf schwächerer Hardware.
|
||||
|
||||
## Bedienung
|
||||
|
||||
Die Weboberfläche von Gitea wird serverseitig mit Hilfe von Templates gerendert
|
||||
(klassische Multi-Page-Anwendung). Dies hat den Vorteil, dass die Seite auch ohne
|
||||
JavaScript dargestellt werden kann (wenn auch mit eingeschränkter Bedienbarkeit).
|
||||
|
||||
Obwohl bei jedem Navigationsschritt durch ein Repository die gesamte Seite neu geladen
|
||||
wird, läuft die Navigation durch Ordner sehr flüssig.
|
||||
|
||||
Optisch und funktional ist die Benutzerschnittstelle stark an GitHub angelehnt. Wer also
|
||||
vorher GitHub verwendet hat, findet sich auf Gitea schnell zurecht
|
||||
|
||||
Der Code in Gitea-Repositories kann durchsucht werden, allerdings ist diese Funktion
|
||||
standardmäßig deaktiviert. Um sie zu aktivieren, müssen diese Zeilen zur
|
||||
Konfigurationsdatei hinzugefügt werden:
|
||||
|
||||
```
|
||||
[indexer]
|
||||
REPO_INDEXER_ENABLED=true
|
||||
```
|
||||
|
||||
Standardmäßig verwendet Gitea die Bibliothek [Bleve](https://blevesearch.com/) für die
|
||||
Suche, es kann jedoch auch eine externe Elasticsearch-Instanz verwendet werden.
|
||||
|
||||

|
||||
|
||||
Gitea kann standardmäßig Bilder, CSV-Dateien, PDFs und Markdown-Dateien auf der
|
||||
Weboberfläche darstellen. Andere Markupsprachen wie ReStructured Text werden
|
||||
standardmäßig nicht unterstützt. Allerdings bietet Gitea als einzige getestete Plattform
|
||||
die Möglichkeit, zusätzliche Renderer in der Konfigurationsdatei zu definieren.
|
||||
Beispielsweise kann Gitea Pandoc verwenden, um RST, LaTEX oder Word-Dokumente in HTML zu
|
||||
konvertieren und anzuzigen. Es ist auch möglich, mit etwas Bastelei einen Viewer für STL
|
||||
oder Excel-Dateien zu installieren.
|
||||
|
||||
## Import bestehender Projekte
|
||||
|
||||
Gitea bietet die Möglichkeit, Projekte von GitHub, Gitlab, Gogs, OneDev, GitBucket und
|
||||
|
@ -22,6 +102,64 @@ scheiterte jedoch mit einer Fehlermeldung.
|
|||
|
||||
## Zusatzfeatures
|
||||
|
||||
Gitea bietet grundlegende Features zum Projektmanagement. Issues können erstellt, mit
|
||||
Labels versehen und bestimmten Entwicklern zugewiesen werden. Es können
|
||||
Fälligkeitstermine für Issues festgelegt und die Arbeitszeit hinterlegt werden.
|
||||
|
||||
Dazu kommt die Möglichkeit, Issues zu Meilensteinen hinzuzufügen und somit
|
||||
beispielsweise den Arbeitsfortschritt für eine neue Version zu verfolgen.
|
||||
|
||||
Darüber hinaus können in Gitea Kanbanboards erstellt werden. Allerdings sind diese
|
||||
Boards nicht in das restliche Issue-System integriert und deswegen umständlich zu
|
||||
nutzen. Issues müssen beispielsweise manuell den Boards hinzugefügt werden. Während
|
||||
GitLab Labels verwendet, um die Issues den Spalten zuzuordnen ist in Gitea außerhalb des
|
||||
Boards nicht ersichtlich, welchen Status ein Issue hat. Ein Issue, das in die
|
||||
Done-Spalte verschoben wird, wird nicht automatisch geschlossen. Umgekehrt führt das
|
||||
Schließen eines Issues nicht zu einer Platzierung in der Done-Spalte.
|
||||
|
||||
Dokumentation für Gitea-Repositories kann in einem simplen, auf Markdown basierenden
|
||||
Wiki veröffentlicht werden.
|
||||
|
||||
Das Hosting statischer Webseiten unterstützt Gitea nicht, weswegen das Team von Codeberg
|
||||
hierfür eine [eigene Lösung](https://codeberg.org/Codeberg/pages-server) entwickelt hat.
|
||||
|
||||
Gitea bietet eine integrierte Registry für Pakete aller gängigen Programiersprachen
|
||||
(z.B. Python, npm, Rust). Wer eine Softwarebibliothek entwickelt, kann diese auf seiner
|
||||
Gitea-Instanz veröffentlichen, sodass andere Entwickler sie nutzen können. Zudem
|
||||
unterstützt die Gitea-Registry Linux-Pakete (.deb und .rpm) sowie Docker-Images.
|
||||
|
||||
Gitea unterstützt als einzige getestete Plattform agit. Dies ist ein alternativer
|
||||
Git-Workflow, der von Alibaba entwickelt wurde. Agit erlaubt es Entwicklern, Pull
|
||||
Requests zu erstellen ohne zuvor einen Fork des Projekts anzulegen. Hierbei wird die
|
||||
Änderung mit diesem Befehl in einen versteckten Branch des Reposiories gepusht, worauf
|
||||
Gitea automatisch eine PR erstellt.
|
||||
|
||||
Dieser Befehl erfordert im Gegensatz zum normalen push keine Schreibrechte im
|
||||
entsprechenden Repository.
|
||||
|
||||
```
|
||||
git push origin HEAD:refs/for/main -o topic="feat/user-search" -o title="Add user search"
|
||||
```
|
||||
|
||||
Es existiert auch ein Git-Plugin für agit namens
|
||||
[`git-repo`](https://git-repo.info/en/2020/03/agit-flow-and-git-repo/), damit man nicht
|
||||
jedes Mal diesen langen Befehl eintippen muss, sondern den Beschreibungstext direkt in
|
||||
die Kommandozeile tippen kann.
|
||||
|
||||
Gitea lässt sich auch mit dem Tool [`tea`](https://gitea.com/gitea/tea) auf der
|
||||
Kommandozeile bedienen. Auf diese Weise lassen sich Issues erstellen und lesen oder Pull
|
||||
Requests erstellen und abrufen.
|
||||
|
||||
Gitea bietet dem Administrator vollen Zugriff auf seinen Webserver und das
|
||||
Templatesystem. Dadurch kann man Templates und Stylesheets durch eigens angepasste
|
||||
Versionen ersetzen und die Weboberfläche nach seinen Bedürfnissen anpassen. Dies ist
|
||||
insbesondere für große Organisationen und Firmen interessant, die ihre
|
||||
Git-Hosting-Plattform nach ihrem Corporate Design gestalten möchten.
|
||||
|
||||
Ein Beispiel für eine stark angepasste Gitea-Oberfläche ist die Instanz des
|
||||
[Blender-Projekts](https://projects.blender.org/), die sich nahtlos in die restliche
|
||||
Projektseite einfügt.
|
||||
|
||||
## Continous Integration
|
||||
|
||||
## Öffentliche Instanzen
|
||||
|
@ -35,15 +173,30 @@ Zusätzlich zu ihrer Gitea-Instanz bietet Codeberg auch einen Webhosting-Dienst
|
|||
[\*.codeberg.page](codeberg.page) an. Codeberg betreibt auch einen Woodpecker-CI-Server,
|
||||
für dessen Verwendung die Nutzer allerdings manuell freigeschaltet werden müssen.
|
||||
|
||||
Im Oktober 2022 hat sich Codeberg dazu entschieden, einen Gitea-Fork names Forgejo zu
|
||||
erstellen. Dies geschah als Reaktion auf die Gründung der Firma Gitea Limited durch die
|
||||
Maintainer des Projekts. Gitea Limited bietet Unternehmen Hostingdienste für ihre
|
||||
Software an. Da viele Nutzer und Beitragende ein von der Community geleitetes Projekt
|
||||
bevorzugen, wurde der Fork ins Leben gerufen. Abgesehen von Design- und Namensänderungen
|
||||
unterscheidet sich Forgejo von Gitea momentan kaum.
|
||||
|
||||
Da Codeberg sehr einfach und günstig zu hosten ist, wird es von einigen Open
|
||||
Da Gitea sehr einfach und günstig zu hosten ist, wird es von einigen Open
|
||||
Source-Projekten auch als sekundäre Plattform zusätzlich zu GitHub verwendet.
|
||||
Beispielsweise betreibt das Team hinter dem alternativen YouTube-Frontend Invidious eine
|
||||
[Gitea-Instanz](https://gitea.invidious.io/iv-org), um vor eventuellen Takedowns des
|
||||
Repositories auf GitHub sicher zu sein
|
||||
|
||||
## Fazit
|
||||
|
||||
Während GitLab meiner Meinung nach die beste Lösung für große Organisationen und
|
||||
Unternehmen darstellt, ist Gitea das perfekte System für einzelne Entwickler, kleine
|
||||
Teams und Hobbybastler. Durch seinen sparsamen Ressourcenverbrauch ist Gitea auf fast
|
||||
jeder Hardware lauffähig und die Einrichtung funktioniert einfach und schnell.
|
||||
|
||||
Darüber hinaus lässt sich Gitea mit eigenen Themes und Templates individuell anpassen
|
||||
und zu seiner persönlichen Website machen.
|
||||
|
||||
Die Projektmanagement-Features von Gitea sind allerdings eher rudimentär. Wer
|
||||
Kanbanboards benötigt, sollte Gitlab oder OneDev in Betracht ziehen oder hierfür eine
|
||||
externe Software verwenden.
|
||||
|
||||
## Quellen
|
||||
|
||||
- Projektseite <https://gitea.com>
|
||||
- Repository <https://github.com/go-gitea/gitea/>
|
||||
- Start von Codeberg (damals TeaHub)
|
||||
<https://www.heise.de/news/Neue-Entwickler-Plattform-TeaHub-will-Github-beerben-4078811.html>,
|
||||
<https://blog.codeberg.org/codebergorg-launched.html>
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
# Sourcehut
|
||||
|
||||
und einem mächtigen Buildsystem - so lässt sich Sourcehut am besten zusammenfassen.
|
||||
Eine Git-Hosting-Plattform ohne Pull-Requests, einer spartanischen Weboberfläche und
|
||||
einem mächtigen Buildsystem - so lässt sich Sourcehut am besten zusammenfassen.
|
||||
|
||||

|
||||
|
||||
Das Projekt steht unter der GNU AGPL 3.0-Lizenz. Sourcehut wird hauptsächlich von Drew
|
||||
DeVault selbst entwickelt, die einzelnen Repositories haben zwischen 50 und 100
|
||||
Contributors.
|
||||
SourceHut begann im
|
||||
[Oktober 2016](https://git.sr.ht/~sircmpwn/meta.sr.ht/commit/40dcb38349af3f67845857c4ac9003911a653624)
|
||||
als Hobbyprojekt von Drew DeVault. Drew wollte eine alternative zu den etablierten
|
||||
Git-Hosting-Diensten entwickeln, die den klassischen E-Mail-basierten Git-Workflow
|
||||
unterstützt anstatt das Funktionsprinzip von GitHub zu kopieren.
|
||||
|
||||
Der
|
||||
[erste Commit](https://git.sr.ht/~sircmpwn/meta.sr.ht/commit/40dcb38349af3f67845857c4ac9003911a653624)
|
||||
erfolgte im Oktober 2016,
|
||||
[im Jahr 2018](https://drewdevault.com/2018/11/15/sr.ht-general-availability.html) war
|
||||
die Alpha-Version der Software öffentlich unter <https://sr.ht> verfügbar.
|
||||
[2018](https://drewdevault.com/2018/11/15/sr.ht-general-availability.html) war die
|
||||
Alpha-Version der Software öffentlich unter <https://sr.ht> verfügbar.
|
||||
|
||||
Die Plattform besteht aus einzelnen Komponenten für die verschiedenen Features:
|
||||
|
||||
|
@ -61,7 +61,7 @@ im [Anhang](sourcehut_setup.md) aufgelistet.
|
|||
|
||||
## Systemanforderungen
|
||||
|
||||
Sourcehut ist auf jedem System lauffähig, das Python3.10 und Go unterstützt. Allerdings
|
||||
Sourcehut ist auf jedem System lauffähig, das Python 3.10 und Go unterstützt. Allerdings
|
||||
sind die Pakete momentan nur für die amd64-Architektur verfügbar. Wer Sourcehut also auf
|
||||
einem Raspberry Pi oder ARM-Server installieren will, muss die Pakete selbst
|
||||
kompilieren.
|
||||
|
@ -84,7 +84,7 @@ besteht, summiert sich der Arbeitsspeicherbedarf auf ca. 1,5GB.
|
|||
## Bedienung
|
||||
|
||||
Sourcehut's Weboberfläche ist spartanisch designt und kommt fast ohne JavaScript aus.
|
||||
Dadurch ist die Webseite sehr performant, auch auf alten Geräten und Browsern.
|
||||
Dadurch ist die Webseite ohne Probleme in alten Geräten und Browsern benutzbar.
|
||||
|
||||
Die Repository-Ansicht ist klar an GitWeb angelehnt und zeigt die Dateien ähnlich wie
|
||||
der `ls -l`-Befehl zusammen mit Größe und Berechtigungen an.
|
||||
|
@ -95,6 +95,9 @@ Auffinden bestimmter Ordner unter vielen Dateien erschwert.
|
|||
Eine Suchfunktion gibt es nicht, dadurch ist es schwierig, auf der Webseite durch große
|
||||
Projekte zu navigieren.
|
||||
|
||||
Hinzu kommt, dass die Webseite nur Code und Markdown-Dokumente darstellen kann. Bilder,
|
||||
PDF-Dokumente oder andere Markupsprachen wie RST werden nicht unterstützt.
|
||||
|
||||

|
||||
|
||||
Die einzelnen Komponenten von Sourcehut sind eigenständige Webanwendungen. Dies hat den
|
||||
|
@ -276,10 +279,14 @@ Allerdings ist die Einrichtung von Sourcehut sehr aufwändig und einige grundleg
|
|||
Features wie eine Suchfunktion fehlen weswegen ich das System in seinem momentanen
|
||||
Zustand nicht empfehlen kann.
|
||||
|
||||
Hinzu kommt, dass Sourcehut trotz seiner spartanischen Weboberfläche und seinem
|
||||
reduziertem Funktionsumfang das System mit dem zweithöchsten Ressourcenverbrauch im Test
|
||||
war.
|
||||
|
||||
Da sich Sourcehut wie gesagt noch im Alpha-Stadium befindet, lohnt es sich jedoch das
|
||||
Projekt weiter zu verfolgen.
|
||||
|
||||
## Quellen
|
||||
|
||||
- [Projektseite](https://sr.ht/~sircmpwn/sourcehut/)
|
||||
- [Sourcehut Blog](https://sourcehut.org/blog/)
|
||||
- Projektseite <https://sr.ht/~sircmpwn/sourcehut/>
|
||||
- Sourcehut Blog <https://sourcehut.org/blog/>
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
# OneDev
|
||||
|
||||
Abschließen möchte ich meinen Test mit einer weitgehend unbekannten Plattform, die erst
|
||||
2019 als Hobbyprojekt von zwei Entwicklern veröffentlicht wurde, sich aber in Sachen
|
||||
Funktionalität nicht vor den anderen Plattformen verstecken muss: OneDev.
|
||||
|
||||

|
||||
|
||||
OneDev ist in Java geschrieben und verwendet das Webframework Apache Wicket. Das Projekt
|
||||
|
@ -9,12 +13,12 @@ Beitragende. Das Projekt ist unter der MIT-Lizenz veröffentlicht.
|
|||
Der
|
||||
[erste Commit](https://code.onedev.io/onedev/server/~commits/6be8e3f97c97e44cf6b5a9b8360c299cc55388f6)
|
||||
erfolgte im April 2012, die erste in Git getaggte Version (2.0.0) wurde 2019
|
||||
veröffentlicht. Damit ist OneDev die jüngste der vier Plattformen, die ich getestet
|
||||
habe.
|
||||
veröffentlicht. Rechnet man mit dem Datum des ersten Release, ist OneDev die jüngste der
|
||||
vier Plattformen, die ich getestet habe.
|
||||
|
||||
OneDev kann eine eingebettete HSQL-Datenbank nutzen, in diesem Fall sind keine
|
||||
zusätzlichen Dienste zum Betrieb erforderlich. Es werden auch externe Datenbanken
|
||||
(MySQL, MariaDB, Postgres, MS SQL, Oracle) unterstützt.
|
||||
OneDev besteht aus einer einzigen Java-Anwendung und erfordert bei Verwendung der
|
||||
eingebetteten HSQL-Datenbank keine zusätzlichen Dienste zum Betrieb. Es werden auch
|
||||
externe Datenbanken (MySQL, MariaDB, Postgres, MS SQL, Oracle) unterstützt.
|
||||
|
||||
Getestet wurde die Version 8.5.2.
|
||||
|
||||
|
@ -66,6 +70,9 @@ seine Projekte öffentlich verfügbar zu machen, muss noch die Option _Security
|
|||
|
||||
## Systemanforderungen
|
||||
|
||||
OneDev ist auf jedem System mit Java-Unterstützung lauffähig. Das offizielle
|
||||
Docker-Image wird für die 64bit Interl/AMD und ARM-Architektur angeboten.
|
||||
|
||||
Der Server benötigte auf meinem System ca. 1.2GB Arbeitsspeicher, der CI-Agent ca.
|
||||
180MB. Die CPU-Auslastung im Leerlauf beträgt auf meinem System (AMD Ryzen 5700G) ca.
|
||||
1%, mit gelegentlichen Spitzen auf 5-10%.
|
||||
|
@ -76,8 +83,13 @@ Suchfunktion habe ich bis zu 50% Auslastung gemessen.
|
|||
|
||||
## Bedienung
|
||||
|
||||
Das Navigieren durch die Repositories geht sehr flüssig vonstatten, ohne dass die
|
||||
gesamte Seite neu geladen werden muss.
|
||||
OneDev verfügt über eine modern gestaltete Weboberfläche, die mit dem Webframework
|
||||
Apache Wicket realisiert wurde. Das Framework lädt beim Navigieren nur die Teile der
|
||||
Website vom Server, die sich durch den entsprechenden Navigationsschritt geändert haben
|
||||
(also z.B. die Dateiliste).
|
||||
|
||||
Dadurch geht das Navigieren durch die Repositories sehr flüssig vonstatten, ohne dass
|
||||
die gesamte Seite neu geladen werden muss.
|
||||
|
||||
Ein Alleinstellungsmerkmal von OneDev ist die Suchfunktion. OneDev verwendet nicht nur
|
||||
eine Textsuchmaschine, sondern analysiert den Code im Repository und bietet so die
|
||||
|
@ -96,6 +108,9 @@ CSS, SCSS, LESS und R verfügbar. Rust wird leider nicht unterstützt.
|
|||
|
||||

|
||||
|
||||
OneDev kann auf der Weboberfläche Code, Markdown-Dokumente und Bilder darstellen. Es
|
||||
gibt keine Unterstützung für alternative Markupsprachen wie RST.
|
||||
|
||||
## Import bestehender Projekte
|
||||
|
||||
OneDev bietet einen Import-Assistenten mit Unterstützung für GitHub, Gitlab, BitBucket,
|
||||
|
@ -110,23 +125,21 @@ Es gibt jedoch nicht die Möglichkeit, Projekte aus anderen OneDev-Instanzen zu
|
|||
|
||||
## Zusatzfeatures
|
||||
|
||||
OneDev verfügt umfangreiche Tools zum Projektmanagement. Es gibt die Möglichkeit, Issues
|
||||
zu Meilensteinen zuzuordnen (z.B. _Sprint 14_ oder _Version 2.0_). Zudem verfügt OneDev
|
||||
über ein Kanbanboard, um Issues je nach Status in mehreren Spalten anzuzeigen.
|
||||
OneDev verfügt über umfangreiche Tools zum Projektmanagement. Es gibt die Möglichkeit,
|
||||
Issues zu Meilensteinen zuzuordnen (z.B. _Sprint 14_ oder _Version 2.0_). Zudem verfügt
|
||||
OneDev über Issue Boards, um Issues je nach Status in mehreren Spalten anzuzeigen.
|
||||
|
||||

|
||||

|
||||
|
||||
Issues können bestimmten Entwicklern zugewiesen werden und es gibt die Möglichkeit,
|
||||
Abhängigkeiten zwischen Issues zu definieren (z.B. Issue A muss vor Issue B erledigt
|
||||
werden).
|
||||
werden). Was allerdings fehlt ist die Möglichkeit, einem Issue mehrere Labels
|
||||
zuzuordnen.
|
||||
|
||||
Issues können auch als vertraulich markiert werden, sodass sie nur von
|
||||
Projektmaintainern gelesen werden können. Dies ist vor allem beim Melden von
|
||||
Sicherheitslücken vorteilhaft.
|
||||
|
||||
Es gibt auch die Möglichkeit, statische Webseiten zu hosten. Hierfür ist im Gegensatz zu
|
||||
Gitlab Pages keine separate Domain nötig. Stattdessen wird die Webseite im
|
||||
Unterverzeichnis `~site` (z.B. `https://example.com/projectname/~site`) veröffentlicht.
|
||||
OneDev bietet auch die Möglichkeit, statische Webseiten zu hosten. Hierfür ist im
|
||||
Gegensatz zu Gitlab Pages keine separate Domain nötig. Stattdessen wird die Webseite im
|
||||
Unterverzeichnis `~site` des Repositorys (z.B. `https://example.com/user/repo/~site`)
|
||||
veröffentlicht.
|
||||
|
||||
Als einzige getestete Plattform verfügt OneDev über ein Plugin-System. Auf diese Weise
|
||||
lassen sich neue Features implementieren, ohne die Software verändern zu müssen.
|
||||
|
@ -205,7 +218,15 @@ Obwohl OneDev noch relativ jung und weitgehend unbekannt ist, kann es funktional
|
|||
durchaus mit den Konkurrenten mithalten. Insbesondere die intelligente Suchfunktion und
|
||||
das einfach zu bedienende CI-System haben mir im Test sehr gut gefallen.
|
||||
|
||||
Allerdings ist OneDev immer noch ein Hobbyprojekt von 2 Entwicklern und hat keine Firma
|
||||
oder größere Organisation hinter sich. Wer OneDev beispielsweise in einem Unternehmen
|
||||
einsetzen möchte, muss die Einrichtung und den Support selbst übernehmen, da es im
|
||||
Gegensatz zu GitLab und Gitea keine öffentlichen Instanzen oder SaaS-Angebote gibt.
|
||||
|
||||
Wer sich hieran nicht stört, erhält mit OneDev eine leichtgewichtige, einfach zu
|
||||
installierende und moderne Git-Hosting-Plattform.
|
||||
|
||||
## Quellen
|
||||
|
||||
- [Projektseite](https://onedev.io/)
|
||||
- [Repository](https://code.onedev.io/onedev/server)
|
||||
- Projektseite <https://onedev.io/>
|
||||
- Repository <https://code.onedev.io/onedev/server>
|
||||
|
|
BIN
src/studienarbeit/assets/gitea/search.png
Normal file
BIN
src/studienarbeit/assets/gitea/search.png
Normal file
Binary file not shown.
After ![]() (image error) Size: 34 KiB |
BIN
src/studienarbeit/assets/gitea/setup.png
Normal file
BIN
src/studienarbeit/assets/gitea/setup.png
Normal file
Binary file not shown.
After ![]() (image error) Size: 103 KiB |
BIN
src/studienarbeit/assets/gitlab/architecture.png
Normal file
BIN
src/studienarbeit/assets/gitlab/architecture.png
Normal file
Binary file not shown.
After ![]() (image error) Size: 44 KiB |
21
src/studienarbeit/assets/gitlab/docker-compose.yml
Normal file
21
src/studienarbeit/assets/gitlab/docker-compose.yml
Normal file
|
@ -0,0 +1,21 @@
|
|||
version: "3.6"
|
||||
services:
|
||||
web:
|
||||
image: "gitlab/gitlab-ce:latest"
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
GITLAB_OMNIBUS_CONFIG: |
|
||||
external_url 'http://localhost:8001'
|
||||
nginx['listen_https'] = false
|
||||
nginx['listen_port'] = 80
|
||||
nginx['redirect_http_to_https'] = false
|
||||
letsencrypt['enable'] = false
|
||||
GITLAB_ROOT_PASSWORD: secret1234
|
||||
ports:
|
||||
- "8001:80"
|
||||
- "2222:22"
|
||||
volumes:
|
||||
- "./config:/etc/gitlab"
|
||||
- "./logs:/var/log/gitlab"
|
||||
- "./data:/var/opt/gitlab"
|
||||
shm_size: "256m"
|
BIN
src/studienarbeit/assets/gitlab/import.png
Normal file
BIN
src/studienarbeit/assets/gitlab/import.png
Normal file
Binary file not shown.
After ![]() (image error) Size: 120 KiB |
BIN
src/studienarbeit/assets/gitlab/issue.png
Normal file
BIN
src/studienarbeit/assets/gitlab/issue.png
Normal file
Binary file not shown.
After ![]() (image error) Size: 61 KiB |
BIN
src/studienarbeit/assets/gitlab/kanban.png
Normal file
BIN
src/studienarbeit/assets/gitlab/kanban.png
Normal file
Binary file not shown.
After ![]() (image error) Size: 38 KiB |
BIN
src/studienarbeit/assets/gitlab/runners.png
Normal file
BIN
src/studienarbeit/assets/gitlab/runners.png
Normal file
Binary file not shown.
After ![]() (image error) Size: 30 KiB |
BIN
src/studienarbeit/assets/gitlab/web_ide.png
Normal file
BIN
src/studienarbeit/assets/gitlab/web_ide.png
Normal file
Binary file not shown.
After ![]() (image error) Size: 226 KiB |
Loading…
Add table
Reference in a new issue