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
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
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
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)
Auto-DevOps
- Für viele Sprachen funktioniert das Out of the Box
- Konfiguration meist doch noch nötig
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