Ich hab mich schon oft gefragt ob es eine schöne Lösung gibt, als Entwickler die CI von gitlab zu überwachen. Bei Solarlux benutzen wir eine Überwachungssoftware, die leider keine git integration hat. Daher musste ich mir selber was bauen.

Im google wird man fündig. Mit Hilfe von Prometheus, Grafana und einem gitlab-ci-pipelines-exporter, bekommt man ein super schönes Dashboard.

gitlab-CI-Dashboard-mit-grafana-prometheus-und-gitlab-ci-pipelines-exporter

Da wir bereits die GitLab Community Edition auf Docker betreiben, bietet sich solch eine Lösung auf Docker regelrecht an.

Die Einrichtung ist ganz einfach. Da wir bereits einen Dockerhost betreiben, der Ausschließlich für Metriken da ist, habe ich auf diesem im git einfach die docker-compose.yml erweitert.

grafana:
image: grafana/grafana
container_name: grafana
ports:
– „3000:3000“
volumes:
– ./cfg/grafana/grafana.ini:/etc/grafana/grafana.ini
– ./cfg/grafana/ldap.toml:/etc/grafana/ldap.toml
– grfdata:/var/lib/grafana
– ./ssl:/ssl:ro
restart: always
networks:
– esnet
– default
environment:
GF_INSTALL_PLUGINS: grafana-polystat-panel,yesoreyeram-boomtable-panel
logging:
driver: none

prometheus:
image: prom/prometheus:latest
container_name: prometheus
ports:
– 9090:9090
volumes:
– ./cfg/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
– prometheus_data:/prometheus
– ./prometheus/:/etc/prometheus/
command:
– ‚–config.file=/etc/prometheus/prometheus.yml‘
– ‚–storage.tsdb.path=/prometheus‘
– ‚–web.console.libraries=/usr/share/prometheus/console_libraries‘
– ‚–web.console.templates=/usr/share/prometheus/consoles‘
networks:
– esnet
– default
restart: always
logging:
driver: journald

Auf dem Dockerhost laufen somit 3 neue Images. Grafana, Prometeus und der gitlab-ci-pipeline-exporter

Die Config.yml für den gitlab-ci-pipeline-exporter sieht wie folgt aus:

gitlab:
url: https://[git-server-url]
token: [generiertes-token-aus-dem-gitlab]

maximum_gitlab_api_requests_per_second: 10
on_init_fetch_refs_from_pipelines_depth_limit: 1

wildcards:
# Fetch projects belonging to a group and potentially its subgroups

-owner:
name: [group1]
kind: group
include_subgroups: false # optional (default: false)
refs: „^master$“

Im Prometheus sollte man unter Status den Exporter sehen. Achtung: die Daten werden nach dem Starten des Image erst nach der Zeitangabe in der yml abgerufen. Also: Warten! 😉