% 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 startet sobald unit fertig ist, wartet nicht auf integration \draw[dagarr] (j2a.east) to[bend right=28] node[midway, above, sloped, 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=5mm, label={[anchor=south west, font=\small\bfseries, yshift=1.5mm]north west:Pipeline}] {}; \end{pgfonlayer} \end{tikzpicture}% } \caption{Aufbau einer Pipeline aus Stages und Jobs. Durchgezogene Pfeile zeigen die starre Stage-Reihenfolge. Der gestrichelte Pfeil ist eine \texttt{needs}-Beziehung, die diese Reihenfolge aufbricht: \texttt{container} startet, sobald \texttt{unit} fertig ist, und wartet nicht auf \texttt{integration}.} \label{fig:pipeline-stages} \end{figure}