Maarten van der Lei, 2023
Link to self: blog
In de wereld van DevOps staat snelheid, stabiliteit en efficientie van de softwareontwikkeling centraal. Daarom is het gebruik van een versiebeheersysteem zoals Git een must.
Gitness (Gitness, 2023) (Zie afbeelding rechts) is een tool die het gebruik van Git eenvoudiger maakt. In dit onderzoek wordt er gekeken naar wat Gitness is, hoe het werkt, wat de voor- en nadelen zijn en hoe het zich verhoudt ten opzichte van andere versiebeheersystemen.
Waarom een alternatief op basis van Git? Omdat Git de grondlegging is van de DevOps structuur en DevOps staat voor verandering en aanpassing, is het belangrijk om te kijken naar alternatieven die het gebruik van Git eenvoudiger maken.
Onderstaand de features van Gitness:
In deze blogpost wordt er antwoord gegeven op de volgende hoofdvraag:
Hoe kan Gitness ingezet worden als alternatief versiebeheersysteem voor Git?
Dit wordt gedaan aan de hand van de ICT Research Methods Pack (ICTResearchMethodsPack, 2023) (Zie afbeelding rechts).
Deze wordt beantwoord aan de hand van de volgende deelvragen:
In een notendop is Gitness is een open-source, zelf-hostbare Git-server met een webinterface en pipeline-functionaliteit.
Het dient als een alternatief voor Gitlab en Github, maar legt de nadruk op een eenvoudigere interface en lichtgewicht functionaliteit.
Het biedt de mogelijkheid om code op te slaan en te beheren, evenals geautomatiseerde DevOps-pipelines uit te voeren.
Ik heb deze informatie uit de PRNewsWire 'news-releases' (PRNewsWire, provided by Harness, 2023), waarin ik voor het eerst de voor mij onbekende tool tegenkwam en leerde dat Gitness van het open source bedrijf Harness.io is.
In essentie is Gitness een platform dat de kracht van code-hosting en geautomatiseerde continue integratiepipelines combineert.
Het stelt gebruikers in staat om Git-repositories lokaal te draaien en biedt een webinterface voor toegang.
Deze tool is ontworpen om de ontwikkelingsworkflow te stroomlijnen en maakt het gemakkelijker om code te beheren en te integreren in een DevOps-omgeving.
Samengevat van de blog van TechTarget, (TechTarget, 2023).
Gitness is vrij nieuw, op 21-sept-23 bracht Harness.io Gitness uit, daarvoor werd er al wel aan gewerkt.
Gitness is gemaakt in de Go programeertaal en sluit daarmee goed aan op de docker omgeving waarin het draait.
Het is een open source project en wordt onderhouden door Harness (Harness github, 2023).
Gitness is een open-source, zelf-hostbare Git-server met een webinterface en pipeline-functionaliteit.
Gitness is eenvoudig op te starten met behulp van Docker.
Zie hieronder het commando om Gitness te starten:
Dit is vertaald naar een docker-compose.yml bestand, zie hieronder:
name: gitness
services:
ship:
image: harness/gitness:latest
ports:
- 3000:3000
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /tmp/gitness:/data
- gitness:/app
restart: always
volumes:
gitness: {}
In dit bestand worden volumes aangemaakt om zo de data van gitness te bewaren en te gebruiken als de container opnieuw wordt opgestart.
Wanneer je dan de docker container opstart met het volgende commando: docker-compose up -d
Dan is Gitness te bereiken op http://localhost:3000/
.
Na het aanmaken van een account en het inloggen, kom je op de homepagina van Gitness:
Vervolgens kun je een repository aanmaken en dan krijg je de volgende opties:
Deze opties zijn niet veel anders dan we van Github en Gitlab gewend zijn.
Binnen de pipelines is het mogelijk om een pipeline te maken met een een YAML structuur.
Wat hier wel opvalt is de afwezigheid van tickets/issues of discussies. Op deze manier ben je dus genoodzaakt om een andere tool te gebruiken voor het beheren van tickets/issues en discussies.
Onderstaand is een voorbeeld van een pipeline die je kan maken binnen Gitness:
![](./public/images/gitness-pipeline-results.png)
![](./public/images/gitness-pipeline-triggers.png)
Omdat er in de Documentatie (Gitness, 2023) van Gitness veel te vinden is over de pipelines, is dit een samenvatting van de belangrijkste punten.
Pipelines binnen Gitness draaien via docker images en zijn daarmee eenvoudig te maken en te gebruiken.
In de YAML van de pipeline is het mogelijk om de volgende aspecten te gebruiken:
- Matrix, om meerdere versies te runnen van je pipeline.
- Secrets, om gevoelige informatie op te slaan.
- Parallel, om meerdere stappen tegelijk te runnen.
- Stages, om stappen te groeperen.
- Steps, om stappen te definiëren.
- Background, deze stap runt in de achtergrond, exit code wordt genegeerd.
- Plugins, deze stap runt een plugin die vooraf gedefinieerd is.
- Run, deze stap runt een commando in een shell. Dit is de meest gebruikte stap binnen je pipeline.
- Background, deze stap runt in de achtergrond, exit code wordt genegeerd.
- Triggers, bovenstaand werd al even kort stilgestaan bij triggers, maar hieronder een voorbeeld:
- Daarmee kan je bijvoorbeeld in een
step
een conditie maken als:when: build.action == "pullreq_created"
- Daarmee kan je bijvoorbeeld in een
Hiervoor heb ik het volgende plaatje gemaakt:
Omdat de pipelines draaien via docker images, is het mogelijk om een eigen image te maken en te gebruiken.
Gitness biedt dan ook via de documentatie site voorbeelden aan van veelgebruikte images/talen, zie de samples.
Op deze manier is het mogelijk om een pipeline te maken die bijvoorbeeld een Postgres database in de achtergrond draait en een NodeJS applicatie test die gebruik maakt van de Postgres database.
Zie hieronder een voorbeeld vanuit de documentatie:
kind: pipeline
spec:
stages:
- type: ci
# alleen runnen als een pull request is aangemaakt, mogelijk op stage en step niveau
when: build.action == "pullreq_created"
spec:
steps:
- name: database
# type: background, run, plugin
type: background
spec:
# docker image die in de container draait.
container:
image: postgres:latest
pull: if-not-exists
# geef environment variabelen mee aan de container
env:
POSTGRES_PASSWORD: password
- name: test
type: run
# maak een matrix aan met verschillende versies van node
strategy:
type: matrix
spec:
axis:
node_version: ["18", "20"]
spec:
container: node:${{ matrix.node_version }}
# shell commando wat uitgevoerd wordt.
script: |-
node -e "console.log('Hello world with node ${{ matrix.node_version }} ')"
Al hoewel bovenstaande YAML opgebouwd is als voorbeeld, is het een best-practice om eerst te wachten tot de database klaar is met opstarten.
Daar heeft Gitness geen oplossing voor, daarom zal je zelf, voor bijvoorbeeld postgres, een waiter moeten gebruiken die polled op de database.
Drone is de methodiek waarmee Gitness de pipelines runt, dit is een open source project van Harness.io.
Wanneer een pipeline wordt gestart, dan wordt er een container opgestart met de drone-cli, deze cli wordt gebruikt om de pipeline te runnen.
Je kan dan je een docker image naar keuze gebruiken om je pipeline te runnen.
Gitness heeft een actieve community, dit is te zien aan de aantal open tegen gesloten issues op Github.
Op Github heeft Gitness een totaal van 27k
stars en 2.7k forks, wat laat zien dat het een populair project is.
De documentatie van Gitness is uitgebreid en goed te begrijpen, zo kan je voor de pipelines eenvoudig een key vinden zoals stage.type.group
die verwijst naar de documentatie als je het type van 'group'
zet als type van je stage.
Gitness heeft een aantal voor- en nadelen ten opzichte van de standaard van Github en Gitlab.
Zo kan je met Gitness eenvoudig een pipeline opzetten en draaien, maar is het niet mogelijk om tickets/issues of discussies te beheren.
Daarnaast is Gitness heel lichtgewicht en eenvoudig op te zetten, maar is het niet mogelijk om plugins te installeren.
Gitness is open source en wordt onderhouden door een grote community, maar is niet zo groot als Github of Gitlab.
Een nadeel waar ik zelf tegenaan ben gelopen is het ontbreken van 2 dingen: een waiter, dus wacht tot deze container is gestart en wanneer je lokaal in docker gitness opstart, dan is het niet mogelijk om vanaf een andere machine de webinterface te bereiken zonder configuratie, en dit is niet gedocumenteerd.
Het grootste voordeel van Gitness in mijn ogen is de eenvoud van het opzetten van het geheel, namelijk lokaal en vrij vlot.
Om het dan samen te vatten, zie onderstaand de voor- en nadelen van Gitness:
Voordelen:
- Eenvoudig op te zetten
- Gebruiksvriendelijk
- Uitgebreide documentatie
- Simpele pipelines
- Lokale Git omgeving
- Clean web UI
- Open source
- Actieve community
Nadelen:
- Geen tickets/issues
- Geen discussies
- Geen plugins van buitenaf om extra functionaliteit zoals waiter of tickets toe te voegen
- Oplossing voor bereiken van buitenaf niet gedocumenteerd (hoe je poort veranderd, GIT url aanpast voor productie gebruik etc)
Ik heb hiervoor een plaatje gemaakt die dit laat zien:
Gitness is een alternatief voor Gitlab en Github, maar legt de nadruk op een eenvoudigere interface en lichtgewicht functionaliteit.
In dat opzicht is Gitness een goed alternatief voor als versiebeheersysteem, maar waar Gitness zich echt onderscheid is de pipeline functionaliteit. Hier is Gitness eenvoudig te gebruiken. Maar waar Github en Gitlab het eenvoudiger maken om een all-in-one oplossing te hebben als compleet project management, is Gitness echt alleen een versiebeheer en pipeline tool.
Het verschil tussen installatie is behoorlijk, Gitness zet je binnen 30s op met behulp van docker, waar je met Gitlab verschillende pagina's aan text moet lezen om het op te zetten.
Zie zo de installatie van Gitlab:
En de installatie van Gitness:
Gitness is een goed alternatief voor Gitlab en Github, maar legt de nadruk op een eenvoudigere interface en lichtgewicht functionaliteit.
Dus als je op zoek bent naar een alternatieve Git oplossing, dan is Gitness een goede keuze.
Echter is Gitness niet de juiste keuze als je een volledige project-oplossing zoekt zoals Github en Gitlab dat bieden met tickets/issues, projectborden en discussies.
Tijdens het schrijven van dit blogpost zijn de volgende bronnen, in APA, gebruikt:
- ICT Research Methods Pack. (2023, 02 oktober). Geraadpleegd op 02 oktober 2023, van ICT Research Methods — Methods Pack for research in ICT
- Harness. (2023, 21 september). Harness Releases Gitness -- Open Source Git Platform. prnewswire. Geraadpleegd op 01 oktober 2023, van prnewswire.com/news-releases/harness-releases-gitness--open-source-git-platform-301934938.html
- TechTarget. (2023, 21 september). TechTarget blog. Geraadpleegd op 02 oktober 2023, van New Git repository faces corporate open source doubts
- Gitness. (2023, 01 oktober). Geraadpleegd op 01 oktober 2023, van Gitness: Open-Source Code Hosting & CI/CD Pipeline Engine
- Gitness Docs. (2023, 02 oktober). Geraadpleegd op 02 oktober 2023, van docs.gitness.com
- Gitness Github. (2023, 03 oktober). Geraadpleegd op 03 oktober 2023, van github.com/harness/gitness
- Harness Github. (2023, 02 oktober). Geraadpleegd op 02 oktober 2023, van github.com/harness
- Gitlab Installation Self Hosting. (2023, 30 september). Geraadpleegd op 30 september 2023, van docs.gitlab.com
- Harness.io. (2023, 30 september). Geraadpleegd op 30 september 2023, van harness.io/blog/gitness-your-ultimate-open-source-development-platform
- Drone.io by Harness. (2023, 05 oktober). Geraadpleegd op 05 oktober 2023, van docs.drone.io/cli/install/