<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Kontinuierliche_Integration</id>
	<title>Kontinuierliche Integration - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Kontinuierliche_Integration"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Kontinuierliche_Integration&amp;action=history"/>
	<updated>2026-06-08T11:46:59Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Kontinuierliche_Integration&amp;diff=975312&amp;oldid=prev</id>
		<title>imported&gt;Polluks: /* Nachteile */</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Kontinuierliche_Integration&amp;diff=975312&amp;oldid=prev"/>
		<updated>2024-03-25T09:13:30Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Nachteile&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Kontinuierliche Integration&amp;#039;&amp;#039;&amp;#039; (auch &amp;#039;&amp;#039;fortlaufende&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;permanente Integration&amp;#039;&amp;#039;; {{enS|&amp;#039;&amp;#039;&amp;#039;continuous integration&amp;#039;&amp;#039;&amp;#039;}}, &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;CI&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;) ist ein Begriff aus der [[Softwaretechnik|Software-Entwicklung]], der den Prozess des fortlaufenden Zusammenfügens von Komponenten zu einer [[Anwendungsprogramm|Anwendung]] beschreibt. Das Ziel der kontinuierlichen Integration ist die Steigerung der [[Softwarequalität]]. Typische Aktionen sind das [[Compiler|Übersetzen]] und [[Linker (Computerprogramm)|Linken]] der Anwendungsteile, prinzipiell können aber auch beliebige andere Operationen zur Erzeugung abgeleiteter Informationen durchgeführt werden. Üblicherweise wird dafür nicht nur das Gesamtsystem neu gebaut, sondern es werden auch [[Testautomatisierung|automatisierte Tests]] durchgeführt und [[Softwaremetrik]]en zur Messung der Softwarequalität erstellt. Der gesamte Vorgang wird automatisch ausgelöst durch [[Commit|Einchecken]] in die [[Versionsverwaltung]].&lt;br /&gt;
&lt;br /&gt;
Eine Vorstufe der kontinuierlichen Integration ist der &amp;#039;&amp;#039;[[Nightly Build]]&amp;#039;&amp;#039; (nächtlicher [[Erstellungsprozess]]). In der Praxis trifft man auch auf kontinuierliche Integration, gepaart mit einem Nightly Build, um die Vorteile beider Systeme zu kombinieren. In der Methode [[DevOps]] wird diese Automatisierung auch Pipeline genannt, da die einzelnen Schritte sequentiell abgearbeitet werden. Die Pipeline ermöglicht hier, die Entwicklungsgeschwindigkeit zu erhöhen, denn schon nach wenigen Minuten erhält der Entwickler Rückmeldung, ob die Qualitätsansprüche erreicht wurden oder nicht.&lt;br /&gt;
&lt;br /&gt;
Eine Weiterentwicklung der kontinuierlichen Integration stellt die &amp;#039;&amp;#039;&amp;#039;[[Continuous Delivery]]&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;CD&amp;#039;&amp;#039;&amp;#039;) dar. Dabei wird in bestimmten Zeitabständen oder bei Erreichen einer bestimmten Qualitätsmetrik eine neue Version der Software ausgeliefert.&lt;br /&gt;
&lt;br /&gt;
== Grundsätze ==&lt;br /&gt;
Spätestens seit das Konzept der [[Extreme Programming#Permanente Integration|permanenten Integration]] von [[Kent Beck]] im Rahmen von [[Extreme Programming]] populär gemacht wurde, ist der Begriff der kontinuierlichen Integration an sich bekannt, für die erfolgreiche Einführung müssen allerdings einige Grundsätze (vgl. &amp;quot;Continuous Integration&amp;quot;&amp;lt;ref&amp;gt;FOWLER, Martin. [http://www.martinfowler.com/articles/continuousIntegration.html Continuous Integration] (englisch)&amp;lt;/ref&amp;gt; von [[Martin Fowler]]) befolgt werden:&lt;br /&gt;
&lt;br /&gt;
;Gemeinsame [[Codebasis]]: Um innerhalb einer Arbeitsgruppe sinnvoll integrieren zu können, muss eine [[Versionsverwaltung]] existieren, in die alle Entwickler ihre Änderungen kontinuierlich integrieren können.&lt;br /&gt;
;Automatisierte Übersetzung: Jede Integration muss einheitlich definierte Tests wie [[Statische Code-Analyse|statische Code-Überprüfungen]] durchlaufen, bevor die Änderungen integriert werden. Dafür ist eine automatisierte Übersetzung notwendig.&lt;br /&gt;
:Um Testergebnisse von den Arbeitsumgebungen unabhängig zu machen, empfiehlt sich der Einsatz von separaten Test-Umgebungen. Damit können auf diesen Rechnern auch gezielt Verfahren implementiert werden, um die Testlaufzeit zu minimieren.&lt;br /&gt;
;Kontinuierliche Test-Entwicklung: Jede Änderung sollte möglichst zeitgleich mit einem dazugehörigen Test entwickelt werden (beispielsweise mittels [[Testgetriebene Entwicklung|testgetriebener Entwicklung]]). Mit Hilfe von [[Kontrollflussorientierte Testverfahren|kontrollflussorientierten Testverfahren]] (Analyse der Code-Überdeckung, engl.: &amp;quot;Code Coverage Analysis&amp;quot;) kann diese Vorgehensweise dokumentiert und kontrolliert werden.&lt;br /&gt;
;Häufige Integration: Jeder Entwickler sollte seine Änderungen so oft wie möglich in die gemeinsame Code-Basis integrieren. Mit kurzen Integrations-Intervallen reduziert man das Risiko fehlschlagender Integrationen und sichert gleichzeitig den Arbeitsfortschritt der Entwickler in der gemeinsamen Code-Basis (Datensicherung, engl.: &amp;quot;backup&amp;quot;).&lt;br /&gt;
;Integration in den Hauptbranch: Jeder Entwickler sollte seine Änderungen in den Hauptbranch des Produktes integrieren, wo dann automatisch ein Build- und Testzyklus gestartet wird. Dieser Build wird der kontinuierliche Integrationsbuild genannt.&lt;br /&gt;
;Kurze Testzyklen: Der Test-Zyklus vor der Integration sollte kurz gehalten sein, um häufige Integrationen zu fördern. Mit steigenden Qualitätsanforderungen für die einzelnen Integrationen steigt auch die Laufzeit zur Ausführung der Test-Zyklen. Die Menge der vor der Integration durchgeführten Tests muss sorgfältig abgewogen werden, weniger wichtige Tests werden dann nur nach der Integration durchgeführt.&lt;br /&gt;
;Gespiegelte Produktionsumgebung: Die Änderungen sollten in einem Abbild der realen Produktionsumgebung getestet werden.&lt;br /&gt;
;Einfacher Zugriff: Auch Nicht-Entwickler brauchen einfachen Zugriff auf die Ergebnisse der Software-Entwicklung. Dies müssen nicht notwendigerweise Quellen sein, sondern kann beispielsweise das in das Testsystem gespielte Produkt für Tester, die Qualitäts-Zahlen für Qualitäts-Verantwortliche, die Dokumentation oder ein fertig paketiertes Abbild für [[Release Manager]] sein.&lt;br /&gt;
;Automatisiertes Reporting: Die Ergebnisse der Integrationen müssen leicht zugreifbar sein. Sowohl Entwickler als auch andere Beteiligte müssen leicht Informationen darüber bekommen können, wann die letzte erfolgreiche Integration ausgeführt wurde, welche Änderungen seit der letzten Lieferung eingebracht wurden und welche Qualität die Version hat.&lt;br /&gt;
;Automatisierte Verteilung: Jede Version sollte leicht in eine Produktionsumgebung (oder ein Abbild derselbigen) überführt werden können. Hierfür sollte die [[Softwareverteilung]] automatisiert sein.&lt;br /&gt;
&lt;br /&gt;
Kontinuierliche Integration kann auf jedem Rechner mit Zugang zum Quellcode durchgeführt werden. Es ist insbesondere möglich, die Integration gleichzeitig auf unterschiedlichen Systemen (etwa verschiedenen Betriebssystemen) durchzuführen.&lt;br /&gt;
&lt;br /&gt;
== Vorteile ==&lt;br /&gt;
* Integrations-Probleme werden laufend entdeckt und behoben (gefixt) – nicht erst kurz vor einem [[Meilenstein (Projektmanagement)|Meilenstein]].&lt;br /&gt;
* Frühe Warnungen bei nicht zusammenpassenden Bestandteilen.&lt;br /&gt;
* Sofortige [[Modultest|Unittests]] entdecken Fehler zeitnah. Im Idealfall kann so beispielsweise direkt bemerkt werden, wenn ein [[Commit#Versionsverwaltung|Commit]] einen Fehler einführt.&lt;br /&gt;
* Ständige Verfügbarkeit eines lauffähigen Standes für Demo-, Test- oder Vertriebszwecke.&lt;br /&gt;
* Die sofortige Reaktion des Systems auf das Einchecken eines fehlerhaften oder unvollständigen Codes „erzieht“ die Entwickler im positiven Sinne zu einem verantwortlicheren Umgang und kürzeren Checkin-Intervallen. Der [[Merge]]-Aufwand wird immer größer, je länger man mit der Integration wartet.&lt;br /&gt;
&lt;br /&gt;
== Nachteile ==&lt;br /&gt;
* Es gibt keine traditionellen [[Meilenstein (Projektmanagement)|Meilensteine]] im herkömmlichen Sinne mehr.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Beispielhafte Werkzeuge für kontinuierliche Integration: &amp;lt;!-- bitte nur Werkzeuge mit Wikipedia Artikel ergänzen, d.h. keine Rotlinks --&amp;gt;&lt;br /&gt;
* [[Bamboo (Software)|Bamboo]] – ein kommerzieller Server für fortlaufende Integration von [[Atlassian]].&lt;br /&gt;
* [[Rational Build Forge]] – ein Framework der [[IBM]]-Tochtergesellschaft [[Rational Software]], das die Build- und Release-Prozesse automatisieren soll.&lt;br /&gt;
* [[Apache Continuum|Continuum]] – ein Subprojekt des [[Apache Maven]] Projekts. Unterstützt Maven 1, Maven 2, Ant und Shell-Skripte.&lt;br /&gt;
* [[CruiseControl]] – ein [[Java (Programmiersprache)|Java]]-basiertes Framework für kontinuierliche Erstellungsprozesse, Derivate auch für das [[.Net-Framework]] und [[Ruby (Programmiersprache)|Ruby]].&lt;br /&gt;
* [[GitLab]] – mit [[MIT-Lizenz]], unterstützt [[Git]] und [[Unix-Shell#Skripte|Shell-Skripte]]. &lt;br /&gt;
* [[Hudson (Software)|Hudson]] – mit [[MIT-Lizenz]], geschrieben in Java, läuft in [[Servlet]]-Container, unterstützt CVS, Subversion, Ant, Maven und [[Unix-Shell#Skripte|Shell-Skripte]].&lt;br /&gt;
* [[Jenkins (Software)|Jenkins]] – mit [[MIT-Lizenz]], geschrieben in Java, läuft standalone oder in [[Servlet]]-Container, unterstützt [[Concurrent Versions System|CVS]], [[Apache Subversion]], [[Git]], [[ClearCase]], [[Apache Ant|Ant]], [[Apache Maven|Maven]], [[Perforce]] und [[Unix-Shell#Skripte|Shell-Skripte]] (Hudson [[Abspaltung (Softwareentwicklung)|Fork]]).&lt;br /&gt;
* [[Team Foundation Server]] – eine Plattform für kollaborative Softwareprojekte auf Basis von [[Microsoft SQL Server]] und [[Windows SharePoint Services]].&lt;br /&gt;
* [[Teamcity]] – ein Werkzeug von [[JetBrains]], webbasiert, verträglich mit den [[Integrierte Entwicklungsumgebung|integrierten Entwicklungsumgebungen]] [[IntelliJ IDEA]], [[Eclipse (Software)|Eclipse]] und [[Microsoft Visual Studio]].&lt;br /&gt;
* [[Travis CI]] – gehostetes und verteiltes Tool für [[GitHub]]-Projekte.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.ddj.com/development-tools/212201506 Multi-stage Continuous Integration von Damon Poole] (englisch)&lt;br /&gt;
* [http://www.martinfowler.com/articles/continuousIntegration.html Continuous integration] von [[Martin Fowler]] (eine Einführung, englisch)&lt;br /&gt;
* [http://www.c2.com/cgi/wiki?ContinuousIntegration Continuous Integration] im &amp;#039;&amp;#039;Portland Pattern Repository&amp;#039;&amp;#039; (englisch)&lt;br /&gt;
* [http://confluence.public.thoughtworks.org/display/CC/CI+Feature+Matrix Continuous Integration Server Feature Matrix] (Übersicht über diverse Werkzeuge, englisch)&lt;br /&gt;
* [http://www.methodsandtools.com/archive/archive.php?id=42 Continuous Integration: The Cornerstone of a Great Shop] von Jared Richardson (Einführung, englisch)&lt;br /&gt;
* [http://www.jamesshore.com/Blog/Continuous-Integration-on-a-Dollar-a-Day.html Continuous Integration on a Dollar a Day] von James Shore (Anleitung, englisch)&lt;br /&gt;
* [http://jayflowers.com/joomla/index.php?option=com_content&amp;amp;task=view&amp;amp;id=26 A Recipe for Build Maintainability and Reusability] von Jay Flowers (englisch)&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Kontinuierliche Integration| ]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Polluks</name></author>
	</entry>
</feed>