Einblicke in Gitlab

CI & CD von groß bis klein

Agenda

  • Funktionen von Gitlab
  • Was ist CI/CD?
  • Wie funktioniert CI/CD

Tools im Einsatz?

  • Atlassian Produkte (Jira, Confluence, Bitbucket, Bamboo)
  • GitHub
  • Jenkins
  • Hipchat/Stride » Slack, Skype, Discord
  • Continuous Integration / Continuous Deployment
via GIPHY

Gitlab

  • Kostenlose opensource Community Edition
  • Starter (Bronze) Edition: $39 (~30 €) pro User pro Jahr
  • Premium (Silber) Edition: $199 (~160 €) pro User pro Jahr
  • Ultimate (Gold) Edition: $999 (~815 €) pro User pro Jahr

Funktionen von Gitlab

als Repository Manager

Repository Manager

  • Versionskontrolle via git
  • Merge Request (Pull-Request)
  • WebIDE

Wiki & Code Snippets

  • Wiki im Markdown Format
  • Versioniert unter projectname.wiki.git
  • Code-Snipptes pro Projekt oder pro Benutzer

Bitbucket

  • Bis 5 Benutzer kostenlos
  • Standard 12 $ pro User pro Jahr
  • Premium 60 $ pro User pro Jahr

Funktionen ähnlich

Funktionen von Gitlab

als Projektverwaltung

Projektverwaltung

  • Tickets
  • Kanban Board
  • Meilensteine
  • Time Tracking
  • Quick Actions
    • /estimate 3d
    • /spend 4h30m

Projekt Templates

  • Projektbezogene Templates für MRs und Tickets
  • .md Dateien im .gitlab Verzeichnis

                    ls -R .gitlab
                    .gitlab/issue_templates:
                    Bug.md  Feature.md

                    .gitlab/merge_request_templates:
                    Merge.md
                

Arbeitsablaufsanalysen

  • Analyse über Status der Tickets und Deployments

Berechtigungen & Sicherheit

  • Usergruppen
    • Guest, Reporter, Developer, Maintainer, Owner
  • Geschützte Branches und Tags
  • MRs Freigabe bei erfolgreichem CI & Review
  • Git-Commits signieren
  • Two-Factor Authentication (Google Authenticator, FreeOTP)

JIRA

  • Bis 10 Benutzer 120 $ pro Jahr
  • Bis 100 Benutzer 84 $ pro User pro Jahr

Deutlich mehr Funktionen und Berichte

Funktionen von Gitlab

als CI & CD

Continuous
Integration & Deployment

  • Config in .gitlab-ci.yml
  • Alle Stages werden zu einer Pipeline
  • Shedules für Cronjobs / Nightly Builds
  • Gitlab Runner
    • Projektbezogen
    • Tag basiert
    • executor: shell, ssh, docker, kubernetes
  • API Trigger möglich

Bamboo

  • Bis zu 10 Jobs 10$
  • Mit Remote Agent 880$

Ähnlicher Funktionsumfang

Funktionen von Gitlab

Sonstige Funktionalitäten

Monitoring

  • Integration via Prometheus
  • Code-Coverage der Tests
  • Vergleich der Builds
  • Ansicht direkt im Merge-Request

API & Drittanwendungen

  • Web-Hooks
  • REST-API & GraphQL in Planung
  • Liste an Drittanwendungen
    • Issue Tracker: Bugzilla, Redmine, Jira
    • CI: Bamboo, Jetbrains Teamcity
    • Monitoring: Prometheus

Gitlab Pages

  • Statische HTML Seiten
  • Für Projekte, Gruppen und Benutzer

Chat via Mattermost

  • Komplett integriertes Chat-Programm
  • Slash-Commands und Notifications

Docker Container Registry

  • Docker Registry direkt in Gitlab
  • Buildprozess um Images aktuell zu halten

Confluence

  • Bis 10 Benutzer 120 $ pro Jahr
  • Bis 100 Benutzer 60 $ pro User pro Jahr

Deutlich mehr Funktionen

Stride / Slack

  • Kleine Teams kostenlos
  • Standard 75 € pro User pro Jahr
  • Plus 141 € pro User pro Jahr

Deutlich mehr Funktionen wie Video-Chat

Funktionen von Gitlab

in der Enterprise Edition

Premium

  • Konfiguration der Kanban-Boards
  • Sprint Burndown Chart
  • CI für Code-Qualität & Browser-Perfomance
  • Rollout auf 10%, 25%, 50%, 100% der Pods

Ultimate

  • Gast-Accounts zählen nicht zur Lizenz
  • Lizenz Überwachung der Libraries
  • Static Application Security Testing (SAST)
  • Dynamic Application Security Testing (DAST)

Was ist CI/CD?

Begriffserklärung

Continuous Integration

  • Gemeinsame Codebasis
  • Automatische Übersetzung / Statische Code-Analyse
  • Test
  • Integrieren

Continuous Delivery

  • Artefakte bauen
  • Artefakte ausliefern auf Test / Staging / Production
  • Jederzeit möglich

Continuous Deployment

  • Komplett automatisiertes Deployment auf Production

Canary Release

  • Langsames Ausrollen an X% der Kunden

Wie funktioniert CI/CD?

Code erstellung

Ablauf
  • Code erstellen
  • Code versionieren
  • Code review
Implementierung
  • Gitlab als Repository Manager
  • GitHub
  • Bitbucket

Code überprüfen

Ablauf
  • Software bauen
  • Software automatisiert testen
  • Aktzeptanzprüfung
Implementierung
  • Gitlab .gitlab-ci.yml im Repo
  • Bamboo GUI
  • Jenkins Jenkinsfile im Repo

Code Releasen

Ablauf
  • Software Artefakt auf Testsystem deployen
  • Artefakt live deployen
  • Artefakt live testen
Implementierung
  • Gitlab .gitlab-ci.yml im Repo
  • Bamboo GUI
  • Jenkins Jenkinsfile im Repo

GUI vs. Config Datei

Config

  • Jeder Entwickler kann es einsehen
  • Sieht was wann wie passiert
  • Verantwortung beim Dev und nicht Sysadmin

GUI

  • Schnellerer Einstieg
  • Berechtigungen müssen vergeben werden
  • Für jedes Projekt muss dies neu zusammengestellt werden

Gitlab CI/CD

Pipelines definieren

  • Kompletter Build und Deploy Prozess
  • Definieren von Stages (Build, Test, Review, Deploy)
  • Definieren von Tasks pro Stage
Beispiel .gitlab-ci.yml für Build, Test und Deploy

                    # Browser-Plugin
                    stages:
                     - build
                     - test
                     - deploy

                    image: node:alpine

                    build:
                        stage: build
                        script:
                         - ci/build.sh
                        artifacts:
                            paths:
                             - build/out/
                            expire_in: 1 Day

                    test_firefox:
                        stage: test
                        script:
                         - npm test firefox
                    test_chromium:
                        stage: test
                        script:
                         - npm test chromium

                    publish:
                        stage: deploy
                        dependencies:
                         - build
                        script:
                         - ci/publish.sh
                        artifacts:
                            paths:
                             - build/out/
                        only:
                         - master
                
via GIPHY

Auto-DevOps

  • Auto Build mit Dockerfile oder Herokuish
  • Test (Herokuish)
  • Qualität (Code Climate)
  • SAST (Gitlab)
  • Dependency Scanning (Gitlab)
  • Licence Scanning (Gitlab)
  • Container Scanning (clair)
  • DAST (OWASP ZAP)
  • Review (Kubernetes)
  • Browser Perfomance Überwachung (Sitespeed.io)
  • (Canary) Deploy (Kubernetes)
  • Monitoring (Prometheus)
via GIPHY

Auto-DevOps

  • Für viele Sprachen funktioniert das Out of the Box
  • Konfiguration meist doch noch nötig

Wieso CI/CD nutzen?

Code-Qualität und Tests

  • laufen automatisiert
  • Code-Style und Qualität ist fest definiert
  • Graphen über Veränderung der Qualität und der Tests


Tests die nicht automatisiert ausgeführt werden, werden garnicht ausgeführt!

Deployment

  • laufen automatisiert
  • Methoden
    • Daten hochladen
    • Versionverwaltung und tags auschecken
    • Artefakt bauen und übertragen
    • Image Bauen und ausrollen von Docker Images
  • Stressfaktor bei Verantwortlichen sinkt

Datenbank Migration

  • Felder erst in späteren Releases löschen
  • Muss abwärtskompatibel sein

Fazit

  • Keine Ausrede, es nicht mehr zu nutzen
  • Automatisierte Prozesse
  • Zeit fürs Wesentliche
  • Rollback einzelner Features möglich
  • Gleichbleibende Qualität
Roland Golla - Never code alone