added pipeline and omnibus diagrams
parent
42535b8ac2
commit
30b760f405
|
|
@ -0,0 +1,55 @@
|
|||
% Architekturdiagramm der GitLab-Omnibus-Komponenten
|
||||
% Einbinden im Hauptdokument:
|
||||
% \usepackage{tikz}
|
||||
% \usetikzlibrary{positioning,arrows.meta,fit,backgrounds}
|
||||
% und an der gewünschten Stelle:
|
||||
% \input{diagrams/omnibus_arch}
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\resizebox{\columnwidth}{!}{%
|
||||
\begin{tikzpicture}[
|
||||
node distance=6mm and 8mm,
|
||||
font=\footnotesize\sffamily,
|
||||
every node/.style={align=center},
|
||||
comp/.style={draw, rounded corners=2pt, minimum height=8mm, minimum width=20mm, fill=blue!5},
|
||||
store/.style={draw, rounded corners=2pt, minimum height=8mm, minimum width=20mm, fill=green!8},
|
||||
ext/.style={draw, dashed, rounded corners=2pt, minimum height=8mm, minimum width=20mm, fill=gray!5},
|
||||
arr/.style={-{Stealth[length=2mm]}, thick},
|
||||
]
|
||||
|
||||
% Ebene 1: Eingang
|
||||
\node[comp] (browser) {Browser / git-Client};
|
||||
\node[comp, right=of browser] (nginx) {nginx\\(Reverse Proxy)};
|
||||
|
||||
% Ebene 2: Anwendungsschicht
|
||||
\node[comp, below=of nginx] (puma) {Puma\\(Rails-App)};
|
||||
\node[comp, right=of puma] (sidekiq) {Sidekiq\\(Hintergrundjobs)};
|
||||
|
||||
% Ebene 3: Datenschicht
|
||||
\node[store, below=of puma] (pg) {PostgreSQL\\(Daten)};
|
||||
\node[store, right=of pg] (redis) {Redis\\(Cache, Queue)};
|
||||
\node[store, left=of pg] (gitaly) {Gitaly\\(Repo-Storage)};
|
||||
|
||||
% Ebene 4: Add-Ons
|
||||
\node[comp, below=of pg] (registry) {Container\\Registry};
|
||||
\node[ext, right=of registry] (runner) {GitLab Runner\\(extern)};
|
||||
\node[ext, left=of registry] (mail) {SMTP-Server\\(extern)};
|
||||
|
||||
% Verbindungen
|
||||
\draw[arr] (browser) -- (nginx);
|
||||
\draw[arr] (nginx) -- (puma);
|
||||
\draw[arr] (puma) -- (pg);
|
||||
\draw[arr] (puma) -- (redis);
|
||||
\draw[arr] (puma.west) to[bend right=20] (gitaly.north);
|
||||
\draw[arr] (sidekiq) -- (redis);
|
||||
\draw[arr] (sidekiq.south) to[bend left=15] (pg.east);
|
||||
\draw[arr] (puma.south) to[bend left=10] (registry.north);
|
||||
\draw[arr, dashed] (runner.north) to[bend left=15] (puma.east);
|
||||
\draw[arr, dashed] (puma.west) to[bend left=20] (mail.north);
|
||||
|
||||
\end{tikzpicture}%
|
||||
}
|
||||
\caption{Komponenten einer Self-Managed-Instanz im Omnibus-Paket. Gestrichelte Komponenten laufen ausserhalb des Omnibus-Pakets und werden separat angebunden.}
|
||||
\label{fig:omnibus-arch}
|
||||
\end{figure}
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
% Pipeline-Schema: Pipeline -> Stages -> Jobs mit needs/DAG-Pfeil
|
||||
% Einbinden im Hauptdokument:
|
||||
% \usepackage{tikz}
|
||||
% \usetikzlibrary{positioning,arrows.meta,fit,backgrounds}
|
||||
% und an der gewünschten Stelle:
|
||||
% \input{diagrams/pipeline_stages}
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\resizebox{\columnwidth}{!}{%
|
||||
\begin{tikzpicture}[
|
||||
node distance=4mm and 6mm,
|
||||
font=\footnotesize\sffamily,
|
||||
every node/.style={align=center},
|
||||
stage/.style={draw, rounded corners=3pt, minimum width=22mm, minimum height=6mm, fill=blue!10, font=\bfseries\footnotesize\sffamily},
|
||||
job/.style={draw, rounded corners=2pt, minimum width=22mm, minimum height=6mm, fill=white},
|
||||
arr/.style={-{Stealth[length=2mm]}},
|
||||
dagarr/.style={-{Stealth[length=2mm]}, dashed, red!70!black, thick},
|
||||
]
|
||||
|
||||
% Stage-Header
|
||||
\node[stage] (s1) {lint};
|
||||
\node[stage, right=12mm of s1] (s2) {test};
|
||||
\node[stage, right=12mm of s2] (s3) {build};
|
||||
\node[stage, right=12mm of s3] (s4) {deploy};
|
||||
|
||||
\draw[arr] (s1) -- (s2);
|
||||
\draw[arr] (s2) -- (s3);
|
||||
\draw[arr] (s3) -- (s4);
|
||||
|
||||
% Jobs unter den Stages
|
||||
\node[job, below=of s1] (j1) {eslint};
|
||||
|
||||
\node[job, below=of s2] (j2a) {unit};
|
||||
\node[job, below=of j2a] (j2b) {integration};
|
||||
|
||||
\node[job, below=of s3] (j3a) {bundle};
|
||||
\node[job, below=of j3a] (j3b) {container};
|
||||
|
||||
\node[job, below=of s4] (j4a) {staging};
|
||||
\node[job, below=of j4a] (j4b) {prod (manual)};
|
||||
|
||||
% needs/DAG: container braucht nur bundle, nicht alle vorigen
|
||||
\draw[dagarr] (j3a.east) to[bend left=10] node[above, midway, font=\tiny\itshape] {needs} (j3b.west);
|
||||
|
||||
% Pipeline-Klammer drumherum
|
||||
\begin{pgfonlayer}{background}
|
||||
\node[draw, dotted, rounded corners=4pt, fit=(s1)(s4)(j2b)(j3b)(j4b), inner sep=4mm, label={[anchor=north west, font=\small\bfseries]north west:Pipeline}] {};
|
||||
\end{pgfonlayer}
|
||||
|
||||
\end{tikzpicture}%
|
||||
}
|
||||
\caption{Aufbau einer Pipeline aus Stages und Jobs. Durchgezogene Pfeile: starre Stage-Reihenfolge. Gestrichelter Pfeil: needs-Beziehung (\acs{DAG}-Modus), die unnötiges Warten verkürzt.}
|
||||
\label{fig:pipeline-stages}
|
||||
\end{figure}
|
||||
Loading…
Reference in New Issue