GithubHelp home page GithubHelp logo

devops-gitness's Introduction

Gitness als alt. Versiebeheersysteem?

Maarten van der Lei, 2023
Link to self: blog

Inleiding

Gitness logo

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:
DevOps logo

Hoofdvraag

ict methods logo

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:

Wat is Gitness?

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).

Kleine feitjes

Go lang logo

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).

Hoe werkt Gitness?

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:
docker run command

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.


Pipelines

Onderstaand is een voorbeeld van een pipeline die je kan maken binnen Gitness:

Pipelines kunnen eenvoudig aangemaakt worden via de webinterface, zie hieronder:
Er wordt dan een YAML structuur aangemaakt, zie hieronder:
Waarna je eenvoudig de pipeline kan starten via de webinterface zoals onderstaand:
De resultaten die je dan te zien krijgt zijn vrijwel identiek aan de resultaten die je krijgt bij Gitlab en Github.
Triggers kan je gebruiken om conditioneel je pipeline automatische te laten runnen. Denk hierbij aan het maken van een nieuwe Tag, of het pushen naar de repository. Dit past goed binnen de DevOps structuur omdat je dan niet handmatig de pipeline hoeft te starten.

Deep dive

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.
  • 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"

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

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.

Wat is de community support van Gitness?

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.
Gitness Github

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.

Wat zijn de voor- en nadelen van Gitness?

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:

Hoe verhoudt Gitness zich ten opzichte van andere versiebeheersystemen?

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.

Installatie

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:
Gitlab installation

En de installatie van Gitness:
Gitness installation

Conclusie

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.

Bronnen

Tijdens het schrijven van dit blogpost zijn de volgende bronnen, in APA, gebruikt:

devops-gitness's People

Contributors

m10rten avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.