spellcheck teil 1
This commit is contained in:
@@ -26,10 +26,10 @@ bestehender Prozesse eingeführt. \cicd besitzt eine zentrale Rolle,
|
|||||||
welche auch den Entwicklungsprozess selbst verändert. Diese zentrale
|
welche auch den Entwicklungsprozess selbst verändert. Diese zentrale
|
||||||
Rolle und Komplexität wird häufig unterschätzt. Schon während der
|
Rolle und Komplexität wird häufig unterschätzt. Schon während der
|
||||||
Einführung oder später im Betrieb treten unerwartete Herausforderungen
|
Einführung oder später im Betrieb treten unerwartete Herausforderungen
|
||||||
zu Tage, vom gravierenden Fehler in Produktion bis zum Systemstillstand.
|
zu Tage, vom gravierenden Fehler im Produktionssystem bis hin zum Systemstillstand.
|
||||||
|
|
||||||
\medskip
|
\medskip
|
||||||
Eine typische Herausforderungen, welche erst im Betrieb deutlich werden,
|
Eine typische Herausforderung, welche erst im Betrieb deutlich wird,
|
||||||
ist die unabsichtliche Auslieferung eines nicht produktionsbereiten
|
ist die unabsichtliche Auslieferung eines nicht produktionsbereiten
|
||||||
Codes in den Betrieb.
|
Codes in den Betrieb.
|
||||||
|
|
||||||
@@ -51,12 +51,11 @@ herangezogen werden können.
|
|||||||
|
|
||||||
\medskip
|
\medskip
|
||||||
Diese Empfehlungen sind sehr allgemein formuliert, bedingt durch die
|
Diese Empfehlungen sind sehr allgemein formuliert, bedingt durch die
|
||||||
große Vielseitigkeit in den Einsatzumgebungen als auch durch in der
|
große Vielseitigkeit in den Einsatzumgebungen und in der
|
||||||
Toollandschaft.
|
Toollandschaft.
|
||||||
|
|
||||||
\medskip
|
\medskip
|
||||||
Sie werden ergänzt durch Ansätze und Strategien, an denen man sich in
|
Sie werden ergänzt durch Ansätze und Strategien, welche eine Orientierung für die Umsetzung liefern.
|
||||||
der Umsetzung orientieren kann.
|
|
||||||
|
|
||||||
\medskip
|
\medskip
|
||||||
Für das dargestellte Problem des ungewollten Deployment eines nicht
|
Für das dargestellte Problem des ungewollten Deployment eines nicht
|
||||||
@@ -71,7 +70,7 @@ wissenschaftliche Arbeiten, Erfahrungsberichte sowie eigene
|
|||||||
Beobachtungen im \cicd Umfeld herangezogen.
|
Beobachtungen im \cicd Umfeld herangezogen.
|
||||||
|
|
||||||
\medskip
|
\medskip
|
||||||
Aus der Problemanalyse wurden die Ursachen identifiziert und
|
Aus der Problemanalyse wurden Ursachen identifiziert und
|
||||||
entsprechende Empfehlungen abgeleitet.
|
entsprechende Empfehlungen abgeleitet.
|
||||||
|
|
||||||
\section{Aufbau}
|
\section{Aufbau}
|
||||||
|
|||||||
@@ -7,10 +7,7 @@ Im diesem Kapitel wird ausgehend von den Phasen des
|
|||||||
Softwareentwicklungsprozesses die Funktionsweise von \cicd aufgezeigt.
|
Softwareentwicklungsprozesses die Funktionsweise von \cicd aufgezeigt.
|
||||||
|
|
||||||
Im Anschluss wird Git und die Rolle von Branches in diesem Umfeld
|
Im Anschluss wird Git und die Rolle von Branches in diesem Umfeld
|
||||||
erläutert. Diese Erklärungen dienen dem Verständnis im Kapitel der
|
erläutert. Diese Erklärungen dienen dem Verständnis der im Kapitel \ref{heraus} geschilderten Problemdarstellungen.
|
||||||
Problemdarstellungen.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
~
|
~
|
||||||
|
|
||||||
@@ -49,7 +46,7 @@ Systemdesign, die Programmierung, der Test sowie der Betrieb.
|
|||||||
\item[Softwaretest]\label{phase-test}
|
\item[Softwaretest]\label{phase-test}
|
||||||
In der Testphase wird ein System oder eine Komponente gegen die zuvor
|
In der Testphase wird ein System oder eine Komponente gegen die zuvor
|
||||||
spezifizierten Anforderungen überprüft. Das Testergebnis dient der
|
spezifizierten Anforderungen überprüft. Das Testergebnis dient der
|
||||||
Behebung von Softwarefehlern um ein fehlerfreies System in Produktion zu
|
Behebung von Softwarefehlern, um ein fehlerfreies System in Produktion zu
|
||||||
übernehmen.
|
übernehmen.
|
||||||
|
|
||||||
\item[Betrieb]\label{phase-ops}
|
\item[Betrieb]\label{phase-ops}
|
||||||
@@ -74,14 +71,14 @@ Software schneller und in regelmäßigen Zyklen bereitgestellt.
|
|||||||
|
|
||||||
Werden diese Prinzipien \cil, \cdel und
|
Werden diese Prinzipien \cil, \cdel und
|
||||||
\cdl zusammenhängend ausgeführt, so wird das
|
\cdl zusammenhängend ausgeführt, so wird das
|
||||||
betreffende System als \textbf{CI-CD Pipeline}\label{ci-cd-pipeline} bezeichnet.
|
betreffende System als \textit{\textbf{CI-CD Pipeline}}\label{ci-cd-pipeline} bezeichnet.
|
||||||
|
|
||||||
~
|
~
|
||||||
|
|
||||||
In Theorie und Praxis gibt es eine Vielzahl von Definitionen zu \cicd.
|
In Theorie und Praxis gibt es eine Vielzahl von Definitionen zu \cicd.
|
||||||
Es gibt Funktionalitäten, welche dem \cil zugeschrieben werden und an anderer
|
Es gibt Funktionalitäten, welche dem \cil zugeschrieben werden und an anderer
|
||||||
Stelle in einer Darstellung von \cicd dem \cdel zu
|
Stelle in einer Darstellung von \cicd dem \cdel zu geordnet sind.
|
||||||
geordnet wird. Zusätzlich wird häufig bei der Nennung der Abkürzung \cd
|
Zusätzlich wird häufig bei der Nennung der Abkürzung \cd
|
||||||
nicht deutlich, ob \cdel oder \cdl gemeint ist.\cite{ws19,redhat,info_aktu}
|
nicht deutlich, ob \cdel oder \cdl gemeint ist.\cite{ws19,redhat,info_aktu}
|
||||||
|
|
||||||
~
|
~
|
||||||
@@ -93,7 +90,7 @@ werden, unabhängig von der Zuordnung zu einem Oberbegriff.
|
|||||||
~
|
~
|
||||||
|
|
||||||
\subsection{Continuous Integration}\label{ci}
|
\subsection{Continuous Integration}\label{ci}
|
||||||
\textbf{„CI``} (\textbf{Continuous Integration}) bezeichnet eine entwicklerorientierte
|
\textbf{„CI``} (\textit{\textbf{Continuous Integration}}) bezeichnet eine entwicklerorientierte
|
||||||
Methode, bei der Code durchgängig integriert und getestet wird.
|
Methode, bei der Code durchgängig integriert und getestet wird.
|
||||||
|
|
||||||
~
|
~
|
||||||
@@ -108,7 +105,7 @@ rechtzeitig zu erkennen.
|
|||||||
Sobald eine Änderung durch einen Entwickler durchgeführt wurde, wird die
|
Sobald eine Änderung durch einen Entwickler durchgeführt wurde, wird die
|
||||||
Integration gestartet und der entsprechende Code automatisch durch
|
Integration gestartet und der entsprechende Code automatisch durch
|
||||||
unterschiedliche Teststufen (Modul-, Integrations- und Systemtests)
|
unterschiedliche Teststufen (Modul-, Integrations- und Systemtests)
|
||||||
validiert. So wird sichergestellt, dass Fehler durch rechtzeitig erkannt
|
validiert. So wird sichergestellt, dass Fehler rechtzeitig erkannt
|
||||||
werden.
|
werden.
|
||||||
|
|
||||||
~
|
~
|
||||||
@@ -141,9 +138,8 @@ archiviert.
|
|||||||
|
|
||||||
~
|
~
|
||||||
|
|
||||||
Ein \cil durchlauf wird auch als \textbf{CI -- Run}
|
Ein \cil Durchlauf wird auch als \textbf{CI -- Run} bezeichnet.
|
||||||
bezeichnet.
|
Ein Beispiel für solche \textit{Build-Server} sind \textit{Jenkins, „drone.io`` und
|
||||||
Ein Beispiel für solche \textit{Build-Server} sind \textit{Jenkins, „drone.io``,
|
|
||||||
GitLab-CI}.
|
GitLab-CI}.
|
||||||
|
|
||||||
~
|
~
|
||||||
@@ -162,7 +158,7 @@ findet nicht statt.
|
|||||||
|
|
||||||
\subsubsection*{Beispiel für eine cloudähnliche Container-Zielumgebung:}
|
\subsubsection*{Beispiel für eine cloudähnliche Container-Zielumgebung:}
|
||||||
In dieser Umgebung können die Container-Images nur von einem lokalen Image-Registry bezogen werden.
|
In dieser Umgebung können die Container-Images nur von einem lokalen Image-Registry bezogen werden.
|
||||||
Continuous Delivery spielt die Artefakte eines erfolgreichen Release-CI-Run automatisch in das lokale Image-Registry der Zielumgebung.
|
\cdel spielt die Artefakte eines erfolgreichen Release-CI-Run automatisch in das lokale Image-Registry der Zielumgebung.
|
||||||
Das Container-Image steht nun bereit, wurde jedoch noch nicht installiert.
|
Das Container-Image steht nun bereit, wurde jedoch noch nicht installiert.
|
||||||
|
|
||||||
|
|
||||||
@@ -175,17 +171,20 @@ nimmt.
|
|||||||
|
|
||||||
~
|
~
|
||||||
|
|
||||||
Für den Entwicklungsalltag bedeutet diesen Praktiken, dass kleinste
|
Für den Entwicklungsalltag bedeuteten diesen Praktiken, dass kleinste
|
||||||
Codeänderungen innerhalb von wenigen Minuten produktiv werden können.
|
Codeänderungen innerhalb von wenigen Minuten produktiv werden können.
|
||||||
|
|
||||||
~
|
~
|
||||||
|
|
||||||
Das Risiko für Fehler im Betrieb ist geringer, da Änderungen in kleinen Schritten mit jedem CI/CD Run integriert, getestet werden.
|
Das Risiko für Fehler im Betrieb ist geringer, da Änderungen in kleinen Schritten mit jedem \textit{CI -- Run} integriert und getestet werden.
|
||||||
|
|
||||||
|
|
||||||
\section{Git und die Bedeutung von Branches}
|
\section{Git und die Bedeutung von Branches}
|
||||||
\label{grund:git}
|
\label{grund:git}
|
||||||
Die \scm Git besitzt im Zusammenhang mit CI/CD die Möglichkeit operativen Systeme versioniert zu steuern. Dies wird auch als \textbf{GitOps} bezeichnet und ist eine weit verbreitete CI/CD Methode.
|
Die \scm Git besitzt im Zusammenhang mit CI/CD die Möglichkeit, operative Systeme versioniert zu steuern. Dies wird auch als \textbf{GitOps} bezeichnet und ist eine weit verbreitete CI/CD Methode\todo{quelle}.
|
||||||
|
|
||||||
|
~
|
||||||
|
|
||||||
Git basiert auf dem Konzept von Branches,
|
Git basiert auf dem Konzept von Branches,
|
||||||
welches verschiedene Codeversionen enthalten kann. Ein Branch ist ein
|
welches verschiedene Codeversionen enthalten kann. Ein Branch ist ein
|
||||||
Entwicklungszweig, auf dem die Änderungen innerhalb eines
|
Entwicklungszweig, auf dem die Änderungen innerhalb eines
|
||||||
@@ -201,10 +200,10 @@ und in den Betrieb gebracht.
|
|||||||
|
|
||||||
~
|
~
|
||||||
|
|
||||||
Ein weit verbreitetes Branchpattern besteht aus zwei permanente Branches
|
Typisches Branchpattern besteht aus zwei permanenten Branches
|
||||||
und mehreren temporären. Der Masterbranch repräsentiert die stabilste
|
und mehreren temporären. Der Masterbranch repräsentiert die stabilste
|
||||||
Softwareversion, diese Version lässt sich auch in der Produktion
|
Softwareversion - diese Version lässt sich auch in der Produktion
|
||||||
vorfinden, häufig gibt es noch den permanenten Developmentbranch, auf
|
vorfinden - häufig gibt es noch den permanenten Developmentbranch, auf
|
||||||
dem die Codeänderungen aus den temporären Branches zusammengeführt
|
dem die Codeänderungen aus den temporären Branches zusammengeführt
|
||||||
werden. Dieser Branch lässt sich in Testumgebungen (Staging-Umgebungen)
|
werden. Dieser Branch lässt sich in Testumgebungen (Staging-Umgebungen)
|
||||||
finden.
|
finden.
|
||||||
@@ -217,7 +216,7 @@ dem Masterbranch gemergt.
|
|||||||
Daneben existieren temporäre Branches, welche für die Entwicklung neuer
|
Daneben existieren temporäre Branches, welche für die Entwicklung neuer
|
||||||
Funktionen oder Bugfixes vorgesehen sind. Sie werden nach dem Merge mit
|
Funktionen oder Bugfixes vorgesehen sind. Sie werden nach dem Merge mit
|
||||||
dem Developmentbranch gelöscht. Diese temporären Branches sind
|
dem Developmentbranch gelöscht. Diese temporären Branches sind
|
||||||
ausschließlich für eine abgegrenzte Codeänderung vorgesehen -- und so
|
ausschließlich für eine abgegrenzte Codeänderung gedacht -- und so
|
||||||
ist für sie eine schnelle und häufige Integration vorgesehen.
|
ist für sie eine schnelle und häufige Integration vorgesehen.
|
||||||
|
|
||||||
~
|
~
|
||||||
@@ -225,8 +224,8 @@ ist für sie eine schnelle und häufige Integration vorgesehen.
|
|||||||
Die wichtigsten Git – Operationen sind Push und Merge:
|
Die wichtigsten Git – Operationen sind Push und Merge:
|
||||||
|
|
||||||
\begin{description}
|
\begin{description}
|
||||||
\item[Push] der lokale Branch wird auf den zentralen Branch gespiegelt
|
\item[Push:] der lokale Branch wird auf den zentralen Branch gespiegelt
|
||||||
\item[Merge] systematische Integration von zwei Branches von einem Source zu einem Targetbranch
|
\item[Merge:] systematische Integration von zwei Branches von einem Source zu einem Targetbranch
|
||||||
|
|
||||||
\end{description}
|
\end{description}
|
||||||
|
|
||||||
@@ -265,8 +264,8 @@ da es im Branchpattern entsprechend definiert wurde.
|
|||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item
|
\item
|
||||||
Es findet eine Überprüfung statt, ob die Integration mit dem
|
Es findet eine Überprüfung statt, ob die Integration mit dem
|
||||||
Developmentbranch funktionieren könnte und deckt mögliche
|
Developmentbranch funktionieren könnte und mögliche
|
||||||
Mergekonflikte auf
|
Mergekonflikte werden aufgedeckt
|
||||||
\item
|
\item
|
||||||
Eine nur für den Entwickler vorgesehene Softwareversion in einer
|
Eine nur für den Entwickler vorgesehene Softwareversion in einer
|
||||||
Testumgebung wird erstellt (bzw. für weiteres Testing)
|
Testumgebung wird erstellt (bzw. für weiteres Testing)
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ Einführung verhindern.
|
|||||||
Eine wesentliche Entscheidung in dieser Phase ist die Toolauswahl.
|
Eine wesentliche Entscheidung in dieser Phase ist die Toolauswahl.
|
||||||
|
|
||||||
Die Nutzung einer All-in-One Lösung verspricht eine schnelle
|
Die Nutzung einer All-in-One Lösung verspricht eine schnelle
|
||||||
Implementierung und Verfügbarkeit von CI/CD, vor Allem wenn sie durch
|
Implementierung und Verfügbarkeit von CI/CD, vor allem wenn sie durch
|
||||||
die firmeninternen Compliance - Vorgaben zugelassen ist (All-in-One
|
die firmeninternen Compliance - Vorgaben zugelassen ist (All-in-One
|
||||||
Tool).
|
Tool).
|
||||||
|
|
||||||
@@ -119,7 +119,7 @@ Problemen oder Verzögerungen führen können. \cite{plonski_herausforderungen_g
|
|||||||
|
|
||||||
$\Rightarrow$ Je nach Tool erheblicher Migrationsaufwand
|
$\Rightarrow$ Je nach Tool erheblicher Migrationsaufwand
|
||||||
|
|
||||||
\subsubsection{\textbf{E04} - Fehlender Automatisierungsexperten/Integrationsexperte}\label{E04}
|
\subsubsection{\textbf{E04} - Fehlender Automatisierungsexperten}\label{E04}
|
||||||
|
|
||||||
Wird ein selfhosted CI/CD-System nicht durch einen
|
Wird ein selfhosted CI/CD-System nicht durch einen
|
||||||
Automatisierungsexperten umgesetzt und betreut, stehen die CI Tools zwar
|
Automatisierungsexperten umgesetzt und betreut, stehen die CI Tools zwar
|
||||||
@@ -153,12 +153,12 @@ $\Rightarrow$ Im individuellen CI/CD-System muss diese Aufgabe geplant werden,
|
|||||||
|
|
||||||
\subsection[im Umfeld von Richtlinien und Standards]{Probleme im Umfeld von Richtlinien und Standards}
|
\subsection[im Umfeld von Richtlinien und Standards]{Probleme im Umfeld von Richtlinien und Standards}
|
||||||
|
|
||||||
Es gibt eine Vielzahl von projekt- und unternehmensspezifische
|
Es gibt eine Vielzahl von projekt- und unternehmensspezifischen
|
||||||
Richtlinien, unter denen CI/CD Systeme implementiert und betrieben
|
Richtlinien, unter denen CI/CD Systeme implementiert und betrieben
|
||||||
werden. Unkenntnis über deren Existenz oder Inhalt führen zu den
|
werden. Unkenntnis über deren Existenz oder Inhalt führen zu den
|
||||||
folgenden Herausforderungen bei einer Einführung.
|
folgenden Herausforderungen bei einer Einführung.
|
||||||
|
|
||||||
\subsubsection{\textbf{E05} -- Sicherheitsrichtlinien widersprechen den Zugriffen durch das Tool\todo{anders formulieren}}\label{E05}
|
\subsubsection{\textbf{E05} -- Konflikt zwischen Sicherheitsrichtlinien und Funktionsweise des Tools}\label{E05}
|
||||||
|
|
||||||
Dazu gehören Sicherheitsrichtlinien im Unternehmen, beispielsweise
|
Dazu gehören Sicherheitsrichtlinien im Unternehmen, beispielsweise
|
||||||
könnte das Ausführen eines privilegierten Containers in einem CI/CD
|
könnte das Ausführen eines privilegierten Containers in einem CI/CD
|
||||||
@@ -196,7 +196,7 @@ Kubernetes so konfigurieren, dass es auf einen Lifeness Check(
|
|||||||
Lebenszeichen über den Bereitschaftsstatus der Software) genau über
|
Lebenszeichen über den Bereitschaftsstatus der Software) genau über
|
||||||
diesen Port erhält. Solange die Software nicht angepasst ist und dieses
|
diesen Port erhält. Solange die Software nicht angepasst ist und dieses
|
||||||
Signal nicht empfangen kann, würde das operative System die Anwendung
|
Signal nicht empfangen kann, würde das operative System die Anwendung
|
||||||
immer wieder neu starten, um eine Selbstreparatur zu ermöglichen. \ref{be:gitlab} \cite{plonski_herausforderungen_Leo_2020}
|
immer wieder neu starten, um eine Selbstreparatur zu ermöglichen. \cite{plonski_herausforderungen_Leo_2020} \ref{be:gitlab}
|
||||||
|
|
||||||
~
|
~
|
||||||
|
|
||||||
@@ -207,7 +207,7 @@ $\Rightarrow$ Pipeline zeigt ungewolltes Verhalten -- ist nicht funktionsfähig
|
|||||||
Eine häufig anzutreffende Richtlinie im Kubernetik-Umfeld betrifft die
|
Eine häufig anzutreffende Richtlinie im Kubernetik-Umfeld betrifft die
|
||||||
Vorgabe, in einem Cluster jede Anwendung im eigenen Namespace
|
Vorgabe, in einem Cluster jede Anwendung im eigenen Namespace
|
||||||
bereitzustellen. Häufig aber lässt das CI/ CD Tool nur ein Deployment
|
bereitzustellen. Häufig aber lässt das CI/ CD Tool nur ein Deployment
|
||||||
auf einen fixen Namespace zu. \cite{be:gitlab,plonski_herausforderungen_Leo_2020}
|
auf einen fixen Namespace zu. \cite{plonski_herausforderungen_Leo_2020} \ref{be:gitlab}
|
||||||
|
|
||||||
~
|
~
|
||||||
|
|
||||||
@@ -244,12 +244,12 @@ $\Rightarrow$ Dieses Vorgehen kann zu einer hohen Belastung der CPU führen, den
|
|||||||
Parallelbetrieb mit anderen Projekten kann es zu enormen Laufzeiten
|
Parallelbetrieb mit anderen Projekten kann es zu enormen Laufzeiten
|
||||||
beim Build-Prozess kommen.
|
beim Build-Prozess kommen.
|
||||||
|
|
||||||
Ein Beispiel dieser Problematik unter der Nutzung von Quarkus ist in einer meiner Projekte aufgetreten (\ref{be:jx}). \todo{check me}
|
Dieser Problematik wurde in meinem Praxisprojekt unter dem Einsatz von Quarkus beobachtet. (\ref{be:jx})
|
||||||
|
|
||||||
|
|
||||||
Quarkus ist ein neues für Webentwicklung geeignetes Java Framework (APIs
|
Quarkus ist ein neues für Webentwicklung geeignetes Java Framework (APIs
|
||||||
und Microservices) und verspricht ein „Native Compiling`` von Java Code.
|
und Microservices) und verspricht ein „Native Compiling`` von Java Code.
|
||||||
Mit diesem Framework können also sehr performante APIs mit einem
|
Mit diesem Framework können sehr performante APIs mit einem
|
||||||
minimalen Bedarf an RAM erstellt werden.
|
minimalen Bedarf an RAM erstellt werden.
|
||||||
|
|
||||||
Ein Build-Prozess unter Quarkus ist entsprechend aufwendig. Auf einem
|
Ein Build-Prozess unter Quarkus ist entsprechend aufwendig. Auf einem
|
||||||
@@ -279,7 +279,7 @@ an Artefakten abgelegt wird.
|
|||||||
\subsubsection{\text{B03} - fehlende Möglichkeit zum kontrolliertem Stopp der
|
\subsubsection{\text{B03} - fehlende Möglichkeit zum kontrolliertem Stopp der
|
||||||
Pipeline}\label{B03}
|
Pipeline}\label{B03}
|
||||||
|
|
||||||
Sobald eine gewisse Kette von Prozessen angestoßen ist, kann sie nicht
|
Sobald eine gewisse Kette von Prozessen in der Pipeline angestoßen wird, kann sie nicht
|
||||||
mehr unterbrochen werden und auf den konsistenten Zustand zuvor
|
mehr unterbrochen werden und auf den konsistenten Zustand zuvor
|
||||||
zurückgesetzt werden.
|
zurückgesetzt werden.
|
||||||
|
|
||||||
@@ -302,39 +302,60 @@ unbeabsichtigt ausgeliefert. \cite{plonski_herausforderungen_Leo_2020,plonski_he
|
|||||||
|
|
||||||
$\Rightarrow$ Nicht gewünschter Code befindet sich in Produktion.
|
$\Rightarrow$ Nicht gewünschter Code befindet sich in Produktion.
|
||||||
|
|
||||||
\todo{QUELLE}
|
|
||||||
|
|
||||||
Dieses Problem wurde bereits in der Einleitung angerissen. Um hier eine
|
Dieses Problem wurde bereits in der Einleitung angerissen. Um hier eine
|
||||||
konkrete Lösungsmöglichkeit zu erarbeiten, erfolgt eine weitere Analyse
|
konkrete Lösungsmöglichkeit zu erarbeiten, erfolgt eine weitere Analyse
|
||||||
innerhalb einer konkreten Systemumgebung.
|
innerhalb einer konkreten Systemumgebung.
|
||||||
|
|
||||||
|
~
|
||||||
|
|
||||||
Das versehentliche Arbeiten auf dem Masterbranch ist zunächst ein
|
Das versehentliche Arbeiten auf dem Masterbranch ist zunächst ein
|
||||||
typisches Problem im Git und GitOps (\ref{grund:git}) Umfeld. In einem CI/CD Umfeld hat es
|
typisches Problem im Git und GitOps (\ref{grund:git}) Umfeld. In einem CI/CD Umfeld hat es
|
||||||
noch viel weitreichendere Folgen, denn durch die durchgängige
|
noch viel weitreichendere Folgen, denn durch die durchgängige
|
||||||
Automatisierung besteht das Problem nicht nur aus der ungewollten
|
Automatisierung besteht das Problem nicht nur aus der ungewollten
|
||||||
Branchüberschreibung -- es weitet sich bis in die Produktion aus.
|
Branchüberschreibung -- es weitet sich bis in die Produktion aus.
|
||||||
|
|
||||||
Hierzu die Darstellung dieses Falls am einem Beispiel unter \gitops (\ref{grund:git}):
|
~
|
||||||
Mit Hilfe des Versionsmanagementsystem Git besteht die Möglichkeit, dass
|
|
||||||
jeder Entwickler in seinem eigenen „Featurebranch`` an seinem Code
|
Hierzu die Darstellung des Falls an einem Beispiel unter \gitops (\ref{grund:git}):
|
||||||
weiterentwickelt. Dieser Code wird später im Masterbranch
|
|
||||||
|
~
|
||||||
|
|
||||||
|
|
||||||
|
\setlength{\leftskip}{3em}
|
||||||
|
|
||||||
|
\noindent Mit Hilfe des Versionsmanagementsystem Git besteht die Möglichkeit, dass
|
||||||
|
jeder Entwickler im eigenen „Featurebranch`` an seinem Code
|
||||||
|
entwickelt. Dieser Code wird später im Masterbranch
|
||||||
zusammengeführt, um die Codeänderung dem Programm zuzuführen.
|
zusammengeführt, um die Codeänderung dem Programm zuzuführen.
|
||||||
|
|
||||||
|
~
|
||||||
|
|
||||||
|
|
||||||
Wenn der Entwickler unbewusst anstelle eines persönlichen Featurebranch
|
Wenn der Entwickler unbewusst anstelle eines persönlichen Featurebranch
|
||||||
den Masterbranch für diese Entwicklung nutzt, wird er im weiteren
|
den Masterbranch für diese Entwicklung nutzt, wird er im weiteren
|
||||||
Verlauf ein Push-Kommando nutzen (da er davon ausgeht, im Featurebranch
|
Verlauf ein Push-Kommando nutzen (da er davon ausgeht, im Featurebranch
|
||||||
zu arbeiten), um seine Änderungen in einer separaten Testumgebung zu
|
zu arbeiten), um seine Änderungen in einer separaten Testumgebung zu
|
||||||
validieren.
|
validieren.
|
||||||
|
|
||||||
|
~
|
||||||
|
|
||||||
In diesem Fall wird die Push-Operation jedoch nicht auf dem
|
In diesem Fall wird die Push-Operation jedoch nicht auf dem
|
||||||
Featurebranch, sondern auf dem Masterbranch ausgeführt. Anstelle eine
|
Featurebranch, sondern auf dem Masterbranch ausgeführt. Anstelle eine
|
||||||
temporäre Testversion zu erhalten, bewirkt der Push auf dem Masterbranch
|
temporäre Testversion zu erhalten, bewirkt der Push auf dem Masterbranch
|
||||||
die Ausführung von CI/CD für ein Release.
|
die Ausführung von CI/CD für ein Release.
|
||||||
|
|
||||||
|
~
|
||||||
|
|
||||||
Dies führt zum Start der Releasepipeline. Die Codeänderung landet als
|
Dies führt zum Start der Releasepipeline. Die Codeänderung landet als
|
||||||
neues Softwarerelease im Produktionssystem und nicht, wie gewünscht, in
|
neues Softwarerelease im Produktionssystem und nicht, wie gewünscht, in
|
||||||
einer Testumgebung.
|
einer Testumgebung.
|
||||||
|
|
||||||
|
\setlength{\leftskip}{0pt}
|
||||||
|
|
||||||
|
~
|
||||||
|
|
||||||
In diesem Fall wäre die Notwendigkeit eines kontrollierten Stopps einer
|
In diesem Fall wäre die Notwendigkeit eines kontrollierten Stopps einer
|
||||||
Pipeline von Relevanz. Würde der Entwickler noch während der Ausführung
|
Pipeline von Relevanz. Würde der Entwickler noch während der Ausführung
|
||||||
der Releasepipeline die Situation erkennen -- wäre dieser „Notstopp``
|
der Releasepipeline die Situation erkennen -- wäre dieser „Notstopp``
|
||||||
@@ -366,7 +387,7 @@ Manche Tools melden einen positiven Status und der CI/CD Prozess läuft weiter.
|
|||||||
|
|
||||||
~
|
~
|
||||||
|
|
||||||
$\Rightarrow$ Ungetesteter Code befindet sich in Produktion
|
$\Rightarrow$ ungetesteter Code befindet sich in Produktion
|
||||||
|
|
||||||
|
|
||||||
\subsubsection{\textbf{B07} -- Modultest nur auf Codeabdeckung ausgelegt}
|
\subsubsection{\textbf{B07} -- Modultest nur auf Codeabdeckung ausgelegt}
|
||||||
@@ -389,7 +410,7 @@ $\Rightarrow$ Funktional ungetesteter Code befindet sich in Produktion
|
|||||||
Datenbankänderungen} \label{B08}
|
Datenbankänderungen} \label{B08}
|
||||||
|
|
||||||
Häufig geht mit Änderungen im Code auch eine Datenbankmigration einher.
|
Häufig geht mit Änderungen im Code auch eine Datenbankmigration einher.
|
||||||
Diese Datenbankmigration muss ebenfalls durch \cicd automatisierte werden.
|
Diese Datenbankmigration muss ebenfalls durch \cicd automatisiert werden.
|
||||||
Treten während der Migration probleme auf, so müssen diese ebenfalls durch das \cicd System abgefangen werden und entsprechende Maßnamen durchgefürt werden.
|
Treten während der Migration probleme auf, so müssen diese ebenfalls durch das \cicd System abgefangen werden und entsprechende Maßnamen durchgefürt werden.
|
||||||
Sind diese Fallbacks nicht definiert, so entstehen unvorhergesehende Folgeprobleme. \cite{connolly,plonski_herausforderungen_Leo_2020,shahin2017continuous}
|
Sind diese Fallbacks nicht definiert, so entstehen unvorhergesehende Folgeprobleme. \cite{connolly,plonski_herausforderungen_Leo_2020,shahin2017continuous}
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
\newcommand{\myFaculty}{Fachbereich Informatik\xspace}
|
\newcommand{\myFaculty}{Fachbereich Informatik\xspace}
|
||||||
\newcommand{\myUni}{Hochschule Darmstadt\xspace}
|
\newcommand{\myUni}{Hochschule Darmstadt\xspace}
|
||||||
\newcommand{\myLocation}{Darmstadt\xspace}
|
\newcommand{\myLocation}{Darmstadt\xspace}
|
||||||
\newcommand{\myTime}{28. November 2019\xspace}
|
\newcommand{\myTime}{19. März 2020\xspace}
|
||||||
\newcommand{\myVersion}{version 4.4\xspace}
|
\newcommand{\myVersion}{version 4.4\xspace}
|
||||||
|
|
||||||
% ****************************************************************************************************
|
% ****************************************************************************************************
|
||||||
|
|||||||
@@ -98,6 +98,7 @@
|
|||||||
\todo{Readthru}
|
\todo{Readthru}
|
||||||
\todo{Grafik}
|
\todo{Grafik}
|
||||||
\todo{svc}
|
\todo{svc}
|
||||||
|
\todo{cicd}
|
||||||
\cleardoublepage
|
\cleardoublepage
|
||||||
\part{Seminararbeit}\label{pt:thesis}
|
\part{Seminararbeit}\label{pt:thesis}
|
||||||
\include{chapters/Einleitung}
|
\include{chapters/Einleitung}
|
||||||
|
|||||||
Reference in New Issue
Block a user