Eigenes Source Control repository
Für meine privaten Go-, C-, Vue- oder anderen Projekt-Repositories möchte ich nicht immer es öffentlich auf Github importieren. Deshalb habe ich mir eine Alternative gesucht. Da ich auf geschäftlich damit zu tuen habe, auch mit dem Linux Kernel, war ich sehr früh von CVS, SVN oder anderen weg zu GIT gegangen. Auch hat mich das handling von GIT sehr gefallen. Vor Github hatte ich bereits gitea gefunden.
GIT
Sehr früh in der Vergangenheit hat man schon Sources von C, shell scripting, Perl oder Java in einem Repository eingecheckt. Es dient zur Versionsverwaltung, heißt man kann die Historie der entsprechenden Source verwalten. Zusätzlich wird die entsprechend weitergegeben Version fest gehalten. Ziemlich einfach, oder. Sehr früh haben die Firmen ihre eigene Source Control Verwaltung aufgebaut. Dann kam irgendwann eine public source Version die etwas verbreiteter war, CVS. Am Anfang hat man bei CVS lokal im Dateisystem ein Ziel-Repository gehabt. Später gab es einen CVS server. Sie war aber sehr rudimentär und wurde dann von vielen durch SVN abgelöst. Idee war das ein Ziel Repository die Verwaltung übernimmt. Heisst man musste den Code auschecken und dann jeden einzelnen Commit über das Netzwerk auf den Server schicken.
GIT war da stabiler und hat von dem neuen billigen Festplattenplatz profitiert. Statt über das Netzwerk jeden COMMIT schicken zu müssen wurde das Repository insgesamt an dem Client ausgelesen. Hier kann man seine eigenen Test-Branches verwalten, bauen, test-commits machen ohne das andere daran gestört werden. Diese Technik wurde von Linus Torwald entwickelt. Gerade Entwickler von Linux sind nicht in einer Firmen-Infrastruktur zuhause sondern weltweit verteilt. Mit dieser dezentralen Technik konnte jeder Linux-Entwickler besser arbeiten. Insgesamt hat sich GIT als Standard jedoch überall durch gesetzt.
Gitea
Gitea ist ein Source Control Repository Server. In diesem Server werden die GIT repositories in einer graphischen Oberfläche verwaltet. Hier kann man sehr schnell in Branches und Historie schauen, was wer wie wo gemacht hat. Dies hilft
1) um einen zentralen Ort zu haben seine Source repositories zu verwalten 2) CI/CD service können von dem Server aus bauen 3) Analyse von Problemen und nachschauen in der Historie
Der Server braucht nur eine mariaDB Datenbank für User management und Metadaten. Beides lass ich in einem Podman Pod laufen. Er wird mit der folgenden YAML definiert:
# Save the output of this file and use kubectl create -f to import
# it into Kubernetes.
#
# Created with podman-3.4.2
apiVersion: v1
kind: Service
metadata:
creationTimestamp: "2022-04-10T09:22:40Z"
labels:
app: gitea
name: gitea
spec:
ports:
- name: "22"
nodePort: 30610
port: 22
targetPort: 22
- name: "3000"
nodePort: 31999
port: 3000
targetPort: 3000
selector:
app: gitea
type: NodePort
---
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: "2022-04-10T09:22:40Z"
labels:
app: gitea
name: gitea_pod
spec:
containers:
- image: docker.io/gitea/gitea:1.23.8
name: gitea
ports:
- containerPort: 22
hostPort: 2422
- containerPort: 3000
hostPort: 3000
securityContext:
capabilities:
drop:
- CAP_MKNOD
- CAP_NET_RAW
- CAP_AUDIT_WRITE
volumeMounts:
- mountPath: /var/lib/mysql
name: gitea_dbdata-pvc
- mountPath: /var/lib/backup
name: gitea_dbbackup-pvc
volumes:
- hostPath:
path: /gitea/gitea-data/gitea/data
type: Directory
name: gitea_giteadata-pvc
- hostPath:
path: /gitea/gitea-data/gitea/db
type: Directory
name: gitea_dbdata-pvc
- hostPath:
path: /gitea/gitea-data/gitea/backup
type: Directory
name: gitea_dbbackup-pvc
Starten kann man den Server dann mit
podman play kube gitea.yaml
Auf dem Host mit port 3000 kann man auf den Service zugreifen:
http://<host auf dem gitea läuft>:3000
Man kann auf dem angegeben Port dann Gitea
verwalten. Ziemlich einfach lässt sich ein GIT repository anlegen und entsprechend entweder initial anlegen, oder ein vorhandenes importieren.
Das alles ist beim Anlegen aber genau beschrieben und es hilft dann das Repository zu verwalten.