<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Deployment als PHP-Schulung</title>
	<atom:link href="https://entwicklungshilfe.nrw/blog/category/deployment/feed/" rel="self" type="application/rss+xml" />
	<link>https://entwicklungshilfe.nrw/blog/category/deployment/</link>
	<description>PHP-Schulungen für effektive Webentwicklung, praxisorientierte Workshops und Seminare für besseres Webdevelopment</description>
	<lastBuildDate>Mon, 23 Sep 2019 18:12:22 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>

<image>
	<url>https://entwicklungshilfe.nrw/wp-content/uploads/2026/02/cropped-favicon-32x32.png</url>
	<title>Deployment als PHP-Schulung</title>
	<link>https://entwicklungshilfe.nrw/blog/category/deployment/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>git-flow &#8211; das Branching-Modell</title>
		<link>https://entwicklungshilfe.nrw/blog/2016/04/29/git-flow-branching-model/</link>
					<comments>https://entwicklungshilfe.nrw/blog/2016/04/29/git-flow-branching-model/#respond</comments>
		
		<dc:creator><![CDATA[Andreas Mautz]]></dc:creator>
		<pubDate>Fri, 29 Apr 2016 10:00:41 +0000</pubDate>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">http://www.entwicklungshilfe.nrw/blog/?p=475</guid>

					<description><![CDATA[<p>In diesem Artikel befassen wir uns mit dem Aufsetzen und der Handhabung von Branches (Zweigen). Wir gehen davon aus, dass du als Leser genug Erfahrung mit der Installation und Handhabung von einfachen Git-Features wie commit, push, und pull hast. In der Welt der Versionskontrollsysteme ist Git mit Abstand eines der effektivsten und einfachsten Tools die [&#8230;]</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/04/29/git-flow-branching-model/">git-flow &#8211; das Branching-Modell</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>In diesem Artikel befassen wir uns mit dem Aufsetzen und der Handhabung von Branches (Zweigen). Wir gehen davon aus, dass du als Leser genug Erfahrung mit der Installation und Handhabung von einfachen Git-Features wie commit, push, und pull hast.</p>
<p>In der Welt der Versionskontrollsysteme ist <a href="https://git-scm.com/">Git</a> mit Abstand eines der effektivsten und einfachsten Tools die uns zur Verfügung stehen, um unseren Arbeitsalltag bzw. unseren Workflow zu optimieren. In diesem Artikel zeigen wir euch, wir ihr Git mit git-flow effektiver nutzt.</p>
<h1>Git Branching</h1>
<p>Wir gehen in unserem Beispiel davon aus, dass zwei neue Features für unser aktuelles Projekt geplant sind. Diese wollen wir, ohne uns als Entwickler gegenseitig auf die Füße zu treten, zeitgleich erledigen.</p>
<p>Dafür gibt es in Versionskontrollsysteme sogenannte Branches. Bei Git enthält jeder Branch eine eigene Kopie des jeweiligen Repositories zum Zeitpunkt der Erstellung des Branches. Den Verlauf einer Feature-Entwicklung im normalen Git-Workflow erklärt der nächste Absatz. Person A erstellt hier zum Beispiel eine Navigation speziell für Smartphones in unserem Projekt.</p>
<h2>Einfacher Workflow ohne Branching-Modell:</h2>
<p>Als erstes beziehen (clonen) wir das Git-Respository vom Server, um eine lokale Kopie des gesamten Projektes zu erhalten. In diesem wird nun auf dem Hauptbranch (Master) das Feature &#8222;Smartphone Navigation&#8220; nach und nach programmiert. Die Schritte schliessen jeweils mit commit und anschliessendem push der Änderungen an das globale Repository ab. Die Webseite auf dem Produktions-Server wird anschliessend mit einem pull aktualisiert.</p>
<p><b>Das Problem an diesem Beispiel ist Folgendes:</b><br />
Sobald eine weitere Person am selben Projekt arbeitet kann es zu Überschneidungen kommen. Angenommen Person A arbeitet an der Smartphone Navigation während Person B einen wichtigen Bugfix einspielt. Dadurch, dass Person B seinen Bugfix so schnell wie möglich auf der Live-Instanz des Projektes haben will, wird nach dem Hinzufügen des Bugfixes sofort der Master-Branch auf den neusten Stand gebracht. Das hat die Nebenwirkung zur Folge, dass auch Teile des Codes von Person A auf den Live-Server geladen werden und somit Probleme bzw. Fehler produzieren werden, da man nicht sicher sein kann, dass Person A seine Arbeit beendet hat. Und seien wir ehrlich &#8211; in Projekten mit mehr als einem Entwickler kommt es IMMER zu solchen Zuständen.</p>
<figure id="attachment_521" aria-describedby="caption-attachment-521" style="width: 150px" class="wp-caption alignleft"><img decoding="async" class="wp-image-521 size-thumbnail" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/03/transport-1208189_1920-150x150.jpg" alt="Mit git-flow effektiver arbeiten" width="150" height="150" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/03/transport-1208189_1920-150x150.jpg 150w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/03/transport-1208189_1920-150x150@2x.jpg 300w" sizes="(max-width: 150px) 100vw, 150px" /><figcaption id="caption-attachment-521" class="wp-caption-text">Mit git-flow effektiver arbeiten</figcaption></figure>
<h2>Lösungsansatz mit Git und einem einfachen Branching-Modell</h2>
<p>Um solche Probleme zu umgehen hat man in Git die Möglichkeit einen oder mehrere Branches zu erstellen. Ein Branch ist eine Abzweigung der Codebasis zu einem bestimmten Punkt. Ab diesem Punkt kann man auf seinem Zweig (Branch) parallel zum Beispiel zum Hauptstrang in Ruhe entwicklen und erst das fertige Feature wieder zurück mergen.</p>
<p>Hier ein Beispiel:<br />
Person A möchte eine Navigation für Smartphones erstellen ohne jemandem in die Quere zu kommen und geht jetzt wie folgt vor:<br />
Git-Repository vom Server ziehen für eine lokale Kopie des gesamten Projektes. Neuen Branch erstellen mit dem Namen &#8222;develop&#8220;.<br />
Auf diesem Branch kann jetzt unabhängig von anderen Branches weiter gearbeitet werden. Jegliche Änderung auf dem neu erstellten Branch wird zunächst keinerlei Auswirkung auf andere Branches haben. Sobald das neue Feature fertig ist, wird Person A seine Änderungen pushen und seine Änderungen in den Hauptbranch &#8222;mergen&#8220; (zusammenführen).<br />
Dieses Merging vom Branch &#8222;develop&#8220; in den Hauptbranch des Projektes bewirkt, dass alle Änderungen im Smartphone Branch nun auch auf dem Hauptzweig des gesamten Projektes verfügbar sind.</p>
<p>Sollte während der Entwicklungszeit der Smartphone-Navigation Person B einen kritischen Bugfix in den Hauptbranch pushen, kann der Administrator ohne Einfluss der Codeänderungen für die Smartphone-Navigation den Hauptbranch updaten. Der Bugfix der auf dem Hauptbranch von Person B eingefügt wird, hat keinerlei Auswirkungen auf die Arbeit von Person A (Smartphone-Navigation Branch). Auch werden Codeänderungen von Person A keinen Einfluss auf die Arbeit von Person B haben, da beide verschiedene Branches verwenden.</p>
<p>Wenn dann jedoch nach der Fertigstellung der Smartphone-Navigation das gesamte Projekt diese neue Navigation erhalten soll, wird der Branch des neuen Features, in unserem Fall &#8222;develop&#8220;, einfach mit dem Hauptbranch zusammengeführt, woraufhin alle anderen Projektmitglieder die neuen Änderungen schließlich auch erhalten. Ausgenommen davon sind natürlich wieder die Projektmitglieder, die sich gerade auf einem anderen Branch befinden.</p>
<h2>Lösungsansatz git-flow als Branching-Modell</h2>
<p>&#8222;<a href="http://nvie.com/posts/a-successful-git-branching-model" target="_blank" rel="noopener noreferrer">Git-flow</a>&#8220; ist ein Tool das den Workflow von Git erweitert und fest spezifiziert. Es kann per Kommandozeile oder per Tool bedient werden. So bieten zum Beispiel <a href="https://www.sourcetreeapp.com/" target="_blank" rel="noopener noreferrer">Sourcetree von Atlassian</a> und <a href="https://www.jetbrains.com/phpstorm/" target="_blank" rel="noopener noreferrer">PhpStorm</a> Untersützung für git-flow. Die sehr feste Spezifizierung von git-flow hält den Workflows konstant und fördert den dezentralisierten Entwicklungsansatz. Zusätzlich zu den bekannten Hauptzweigen &#8222;master&#8220; und &#8222;develop&#8220; werden sogenannte Support-Branches erstellt, welche später für differenzierte Aufgaben verwendet werden. Diese werden auf verschiedene Art und Weise mit unseren Hauptzweigen &#8222;master&#8220; und &#8222;develop&#8220; zusammengeführt. Wir werden diese Support-Branches anhand von drei Beispielen kurz erklären.</p>
<h3>Support-Branches bei git-flow</h3>
<p>Derzeit haben wir in unserem Projekt zwei Zweige, &#8222;master&#8220; und &#8222;develop&#8220;. &#8222;Master&#8220; ist die aktuelle Live-Version des Projektes während &#8222;develop&#8220; einen aktuellen Entwicklungsstand darstellt. &#8222;Git-flow&#8220; fügt nun drei weitere Arten von Branches zu unserem Workflow: &#8222;release&#8220;, &#8222;feature&#8220;, und &#8222;hotfix&#8220;.</p>
<p><strong>Hotfix-Branches</strong></p>
<p>Der Hotfix-Branch wird von den beteiligten Entwicklern lediglich dazu benutzt Fehlerbehebungen des Live-Systems durchzuführen. Sobald ein Fehler behoben ist, wird der Hotfix-Branch geschlossen und mit &#8222;master&#8220; und &#8222;develop&#8220; zusammengeführt. Dieses führt auf der einen Seite zu einem sauber aktualisierten Live-System und auf der anderen Seite wird der Hotfix in die Entwicklungsschiene transferiert, da sämtliche anderen Branches vom &#8222;develop&#8220; Branch abhängen.<br />
<img decoding="async" class="size-main-full wp-image-521" src="http://nvie.com/img/hotfix-branches@2x.png" alt="Hotfix-Branch Workflow" height="400" />Hotfix-Branch Workflow © <a href="http://nvie.com">nvie.com</a></p>
<p><strong>Feature-Branches</strong></p>
<p>Der Feature-Branch wird als Zweig zur Erstellung neuer Funktionen verwendet. Sobald eine neue Funktionalität abgeschlossen ist, wird der Feature-Branch auf mit dem Develop-Branch zusammengeführt und kann auf einer Testinstanz unabhängig von unserem Master branch getestet werden. Feature-Branches sollten in dieser Struktur lediglich lokal vorkommen.<br />
<img decoding="async" class="size-main-full" src="http://nvie.com/img/merge-without-ff@2x.png" alt="Feature-Branch Workflow" height="400" />Feature-Branch Workflow © <a href="http://nvie.com">nvie.com</a></p>
<p><strong>Release-Branches</strong></p>
<p>Der Release-Branch wird bei jedem neuen Release oder großen Codeänderung (Milestone) benutzt. Ein Release kann zum Beispiel eine Sammlung von verschiedenen Features sein, welche als Release-Branch gruppiert bzw. zusammengefasst werden, um gemeinsam deployed zu werden. Ein Release-Branch sollte immer mit &#8222;master&#8220; als auch &#8222;develop&#8220; zusammengeführt werden, wobei letzterer für die Qualitätssicherung inklusive Testing Vorrang hat.</p>
<h2>Fazit</h2>
<p>Das Arbeiten mit git-flow oder generell die korrekte Nutzung von Branching stellt eine qualitätssichernde sowie Workflow-optimierende Maßnahme da, die uns hilft sauber und getrennt voneinander unseren Aufgaben nach zu gehen, ohne die Arbeit des Anderen zu beeinträchtigen.</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/04/29/git-flow-branching-model/">git-flow &#8211; das Branching-Modell</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://entwicklungshilfe.nrw/blog/2016/04/29/git-flow-branching-model/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Frontend-Testing mit Codeception</title>
		<link>https://entwicklungshilfe.nrw/blog/2016/04/22/frontend-testing-mit-codeception/</link>
					<comments>https://entwicklungshilfe.nrw/blog/2016/04/22/frontend-testing-mit-codeception/#comments</comments>
		
		<dc:creator><![CDATA[Andreas Mautz]]></dc:creator>
		<pubDate>Fri, 22 Apr 2016 10:00:11 +0000</pubDate>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Software Qualität]]></category>
		<guid isPermaLink="false">http://www.entwicklungshilfe.nrw/blog/?p=468</guid>

					<description><![CDATA[<p>Codeception ist ein PHP basiertes Framework für automatisiertes Frontend-Testing. Es liefert abgesehen von Tools für Akzeptanztests auch weitreichende Tools für Unit-Tests. In diesem Artikel gehen wir jedoch weitestgehend auf die Funktion der Akzeptanztests ein, also die Tests, die den Fall simulieren dass ein User sich gerade durch eine Webseite klickt. Im nachfolgenden Absatz möchte ich [&#8230;]</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/04/22/frontend-testing-mit-codeception/">Frontend-Testing mit Codeception</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Codeception ist ein PHP basiertes Framework für automatisiertes Frontend-Testing. Es liefert abgesehen von Tools für Akzeptanztests auch weitreichende Tools für Unit-Tests. In diesem Artikel gehen wir jedoch weitestgehend auf die Funktion der Akzeptanztests ein, also die Tests, die den Fall simulieren dass ein User sich gerade durch eine Webseite klickt. Im nachfolgenden Absatz möchte ich zunächst die Installation und die generelle Verwendung von Codeception für das Frontend-Testing erläutern, sowie auf die Basisfunktion der Akzeptanztests eingehen. Codeception ermöglicht es, reale Testszenarien anhand von festgelegten Abläufen zu durchlaufen, ohne selbst den Browser zu öffnen.</p>
<h2>Die Installation</h2>
<p>Codeception kann <a href="http://codeception.com/install" target="_blank">hier</a> via Composer installiert werden. Jedoch wird davon in unserem Beispiel kein Gebrauch gemacht, da wir den sofortigen Einsatz von Codeception auf einer frischen VM realisieren, und somit keinen Composer installiert haben.</p>
<p><strong>Mac/Linux:</strong><br />
Auf dem Mac bzw Linux und Unix derivaten kann Codeception auch per Command-line installiert werden.</p>
<pre class="lang:default decode:true " title="Codeception installieren">wget http://codeception.com/codecept.phar &amp;&amp; php codeception.phar bootstrap</pre>
<p>mit diesem beidem Befehlen wird Codeception installiert und dessen Ordnerstruktur erstellt.</p>
<p><strong>Windows:</strong><br />
Auf Windows muss das installationsarchiv <a href="http://codeception.com/install" target="_blank">hier</a> manuell heruntergeladen werden von:</p>
<p>Nach der Installation auf Windows hat Codeception die benötigte Ordnerstruktur erstellt.</p>
<p>Sollte das Frontend-Testing mit Google Chrome, Firefox oder anderen Browsern durchgeführt werden, wird auch Selenium benötigt. Die Installation kann auf einem Mac/Linux per Kommandozeile mit folgenden Befehlen geschehen.</p>
<p>Mac: </p>
<pre class="lang:default decode:true " title="Codeception installieren">brew install selenium-server</pre>
<p>Linux: </p>
<pre class="lang:default decode:true " title="Codeception installieren">apt-get install selenium-server</pre>
<p>Auf Windows muss der Selenium Server von http://selenium.org heruntergeladen und installiert werden.</p>
<p>Nachdem Selenium und Codeception installiert sind, gestaltet sich der Rest der Konfiguration relativ einfach. Zunächst können im &#8222;_env&#8220; Verzeichnis von Codeception sogenannte Testumgebungen angelegt werden, welche der Reihe nach von Codeception durchlaufen und abgearbeitet werden. Ein Beispiel für einen solche Datei sieht wie folgt aus.</p>
<figure style="width: 300px" class="wp-caption alignleft"><img decoding="async" title="Chrome Konfigurationsdatei (Full HD)" src="http://www.entwicklungshilfe.nrw/blog/wp-content/uploads/2016/04/Bildschirmfoto-2016-04-20-um-10.30.27.png" title="Chrome Konfigurationsdatei (Full HD)" alt="Frontend-Testing mit Codeception" /><figcaption class="wp-caption-text">Chrome Konfigurationsdatei (Full HD test)</figcaption></figure>
<p>In diesem .yml file wird festgelegt, dass der zu testende Browser Google Chrome sein wird.<br />
Des Weiteren wird festgelegt, dass wir in der Auflösung 1920&#215;1080 testen werden.<br />
Die URL kann pro Testumgebung jeweils eine URL beinhalten, welche in unserem Testszenario momentan auf einen unserer Testserver zeigt.</p>
<h2>Vorbereitungen für das Frontend-Testing</h2>
<p>Nachdem wir unsere Umgebungsvariablen festgelegt haben, können wir uns der nächsten wichtigen Datei widmen. Die Datei __bootstrap.php aus dem Verzeichnis &#8222;acceptance&#8220; wird vor jedem Test aufgerufen und erlaubt es, Variablen zu deklarieren die dann in den jeweiligen Testszenarien verwendet werden können. Diese Variablen bestehen den ganzen Test über und können von den verschiedenen Szenarien gemeinsam benutzt werden. Eine sinnvolle Verwendung dieser Datei wäre zum Beispiel eine Funktion zum erkennen des benutzten Browsers, um in den Tests darauf entsprechend reagieren zu können und die Tests für den jeweiligen Browser besser anzupassen.</p>
<p>Beispiel: Sollte die Funktion in __bootstrap.php ein mobiles Endgerät entdecken, kann der darauf folgende Test in seinem Testszenario darauf reagieren und zum Beispiel die mobile Navigation anstatt die normale Navigation Testen.</p>
<p>Hinweis: Bevor die Testszenarien durchlaufen werden können, muss Selenium entweder auf Windows mit einem Doppelklick, oder auf Mac bzw Linux/Unix derivaten mit dem Konsolenbefehl &#8222;selenium-server -p 4444&#8220; gestartet werden.</p>
<h2>Das Testszenario</h2>
<p>Kommen wir nun zu den eigentlichen Tests. Jedes Testszenario das wir anlegen wollen, muss sich im &#8222;acceptance&#8220; Verzeichnis befinden. Jede PHP datei außer __bootstrap.php wird dort für jede einzelne Testumgebung die wir im &#8222;_env&#8220; Verzeichnis liegen haben durchlaufen. Haben wir zum Beispiel ein Testszenario wie &#8222;Navigation.php&#8220; im &#8222;acceptance&#8220; folder, wird dieses Szenario für chrome_1920x1080.yml aufgerufen.<br />
Ein Beispiel eines solchen Tests sieht wie folgt aus.</p>
<pre class="lang:default decode:true " title="Navigations-Testszenario">
<?php
    $I = new AcceptanceTester($scenario);
    $I->amOnPage("/");
    $I->wantTo("test elements of the navigation (upper categories)");
    $I->click(".menu-button");
    $I->click("#nav-wide .level0.nav-1 a span");
    $I->moveMouseOver("#nav-wide .level0.nav-1 a span");
    $I->click(".level1.nav-1-1  a span");
?>
</pre>
<p>Der obrige test wurde mit dem Befehl &#8222;php codecept.phar run acceptance &#8211;env chrome_1920x1080&#8220; aufgerufen. Für jede weitere Testumgebung die in die Testszenarien eingebunden werden soll, wird eine weitere &#8211;env Direktive benötigt.</p>
<p>Beispiel 2 Browser:</p>
<pre class="lang:default decode:true " title="Codeception installieren">php codecept.phar run acceptance --env chrome_1920x1080 --env firefox_1920x1080</pre>
<p><strong>Hint:</strong> Während eines Tests der Funktionen wie $i-&gt;moveMouseOver() enthält darf die Maus nicht bewegt werden!</p>
<figure style="width: 300px" class="wp-caption alignleft"><img decoding="async" src="http://www.entwicklungshilfe.nrw/blog/wp-content/uploads/2016/04/Bildschirmfoto-2016-04-20-um-12.55.18.png" alt="Footer Testszenario" /><figcaption class="wp-caption-text">Footer Testszenario (acceptance/FooterCept.php)</figcaption></figure>Wie man in unserem Test sehen kann, wird hier der Anmeldebereich einer Website getestet. Es handelt sich hierbei um einen simplen Test der einzig und allein die jeweilige Login-Seite ansteuert und das Form-Feld mit Daten befüllt. Die einfache Syntax von Codeception macht es dem Entwickler einfach in einer kurzen Zeit verständliche und benutzbare Testszenarien zu schreiben. </p>
<p>Je nach Generalisierung der Tests wie Beispielsweise oben beschrieben, lässt dich der Test für mehrere Anwendungszwecke verwenden. In unserem Fall ist der oben zu sehende Test für jegliches Login-Formular einer Magento-Shop Webseite einsetzbar.</p>
<p>Nachdem Codeception die Tests erfolgreich (oder auch nicht) beendet hat, wenden wir uns dem Verzeichnis &#8222;records&#8220; zu. Im Verzeichnis &#8222;records&#8220; befinden sich Screenshots von jedem einzelnen Schritt unserer Tests und dem Ergebnis. Es bleibt einem die Möglichkeit entweder die Datei &#8222;index.html&#8220; zu öffnen und sich in einem minimalistisch gestalteten Web-interface durch die Ergebnisse zu klicken oder sich die einzelnen Fehlgeschlagenen Tests heraus zu suchen. Fehlgeschlagene Tests haben eine &#8222;.fail.&#8220;-Endung im Dateiname und sind direkt in &#8222;records&#8220; Ordner zu finden.</p>
<p><strong>Hint:</strong> Der Befehl $i-&gt;wait() veranlasst Codeception dazu, eine gewisse Zeit zu warten und einen neuen Screenshot zu erstellen.</p>
<h2>Fazit:</h2>
<p>Codeception ist ein effizient einsetzbares Tool mit noch kleinen Schönheitsfehlern, wie zum Beispiel das unnötige Erstellen eines Screenshots nach Verwendung des $i-&gt;wait() Befehls, die einen Entwickler jedoch keinesfalls am produktiven Einsatz des Frameworks hindern. Es stellt mit seiner einfachen Syntax und leichten Bedienbarkeit eine effektive Methode für das Frontend-Testing dar.</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/04/22/frontend-testing-mit-codeception/">Frontend-Testing mit Codeception</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://entwicklungshilfe.nrw/blog/2016/04/22/frontend-testing-mit-codeception/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Git auf der Command Line CLI einsetzen</title>
		<link>https://entwicklungshilfe.nrw/blog/2016/02/11/git-auf-der-command-line-cli/</link>
					<comments>https://entwicklungshilfe.nrw/blog/2016/02/11/git-auf-der-command-line-cli/#respond</comments>
		
		<dc:creator><![CDATA[Andreas Mautz]]></dc:creator>
		<pubDate>Thu, 11 Feb 2016 07:58:00 +0000</pubDate>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Entwicklertools]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[Seminar]]></category>
		<category><![CDATA[Training]]></category>
		<category><![CDATA[Versionskontrolle]]></category>
		<category><![CDATA[Workshop]]></category>
		<guid isPermaLink="false">http://www.entwicklungshilfe.nrw/blog/?p=382</guid>

					<description><![CDATA[<p>Git ist ein häufig genutztes Versionstool in PHP-Projekten. Allerdings wird häufig mit grafischen Oberflächen wie Sourcetree gearbeitet. Webdeveloper nutzen diese Tools häufig, ohne genau zu wissen, was im Hintergrund genau passiert. Daher zeigen wir dir in diesem Artikel, wie du das alles schnell und effektiv auf der Command Line nutzen kannst. Das hat einige Vorteile: Du bist [&#8230;]</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/02/11/git-auf-der-command-line-cli/">Git auf der Command Line CLI einsetzen</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Git ist ein häufig genutztes Versionstool in PHP-Projekten. Allerdings wird häufig mit grafischen Oberflächen wie <a href="https://www.sourcetreeapp.com/" target="_blank" rel="noopener noreferrer">Sourcetree</a> gearbeitet. Webdeveloper nutzen diese Tools häufig, ohne genau zu wissen, was im Hintergrund genau passiert. Daher zeigen wir dir in diesem Artikel, wie du das alles schnell und effektiv auf der Command Line nutzen kannst. Das hat einige Vorteile: Du bist schneller und hast gleichzeitig viel mehr <a href="http://www.entwicklungshilfe.nrw/blog/category/git-schulung/">Wissen über Git</a> und Kontrolle über deine Software und Arbeitsschritte.</p>
<figure id="attachment_391" aria-describedby="caption-attachment-391" style="width: 300px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/terminal-git-log.png" rel="attachment wp-att-391"><img decoding="async" class="wp-image-391 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/terminal-git-log-300x148.png" alt="Terminal Git-Log - www.slant.co" width="300" height="148" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/terminal-git-log-300x148.png 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/terminal-git-log-768x380.png 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/terminal-git-log.png 976w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/terminal-git-log-300x148@2x.png 600w" sizes="(max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-391" class="wp-caption-text">Terminal Git-Log &#8211; www.slant.co</figcaption></figure>
<p>In Stellenausschreibungen steht heute immer öfter die Anforderung, Git über die Command Line zu nutzen. Gerade bei <a href="https://www.gulp.de/knowledge-base/markt-und-trends/umfrage-ergebnis-noch-junior-oder-schon-senior.html" target="_blank" rel="noopener noreferrer">Senior-Entwicklern</a> wird dieses Wissen bereits explizit vorausgesetzt. Das <a href="https://de.wikipedia.org/wiki/Kommandozeile" target="_blank" rel="noopener noreferrer">Command-Line</a>-Wissen kannst du dann auch anwenden, wenn dir kein Rechner mit Sourcetree zur Verfügung steht, weil du dich vielleicht direkt auf den Linux-Servern lokal oder remote bewegen musst.</p>
<h2>Git Commands, die tatsächlich gebraucht werden</h2>
<p>Es sind nicht so viele <a href="https://confluence.atlassian.com/bitbucketserver/basic-git-commands-776639767.html" target="_blank" rel="noopener noreferrer">Git Commands</a>, die für die tägliche Arbeit gebraucht werden, wie man vielleicht glaubt. Hier mal ein einfacher Task mit den Git-Commands direkt auf der Command Line.</p>
<h3>Git Repository klonen</h3>
<p><strong>git clone https://url.com/example-repo</strong></p>
<figure id="attachment_393" aria-describedby="caption-attachment-393" style="width: 300px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-Repository-klonen.jpg" rel="attachment wp-att-393"><img fetchpriority="high" decoding="async" class="wp-image-393 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-Repository-klonen-300x213.jpg" alt="Git-Repository klonen" width="300" height="213" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-Repository-klonen-300x213.jpg 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-Repository-klonen-768x546.jpg 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-Repository-klonen-1024x728.jpg 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-Repository-klonen-269x192.jpg 269w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-Repository-klonen.jpg 1920w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-Repository-klonen-300x213@2x.jpg 600w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-Repository-klonen-768x546@2x.jpg 1536w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-Repository-klonen-269x192@2x.jpg 538w" sizes="(max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-393" class="wp-caption-text">Git Repository klonen</figcaption></figure>
<p>Mit dem Git Command wird das Repo in das Verzeichnis &#8222;example-repo&#8220; geklont. Gibt man hinter der URL ein anderes Ziel oder Target an, wird ein anderer Ordner genommen. Das macht bei der späteren Anwendung keinen Unterschied, kann aber zu mehr Übersicht in der Dateistruktur genutzt werden. Mit der Angabe von &#8222;.&#8220; wird das Repository in das aktuelle Verzeichnis geklont. Das ist zwar ein seltener Anwendungsfall, spart einem aber bei Bedarf Zeit. Dafür muss der Ordner allerdings vollständig leer sein. Auch die Verzeichnisse der PHP-IDEs, wie <a href="http://www.entwicklungshilfe.nrw/seminare/phpstorm-best-practice/">PhpStorm</a>, dürfen hier nicht vorhanden sein.</p>
<h3>Branch erstellen</h3>
<p><strong>git checkout -b myNewTask</strong><br />
Mit dem Checkout-Befehl und dem Parameter -b wird ein neuer Branch &#8222;myNewTask&#8220; erstellt und automatisch auf diesen gewechselt. Hier ist darauf zu achten, auf welchen Branch man sich zu dem Zeitpunkt der Erstellung befindet, und natürlich auch darauf, dass man den aktuellsten Stand auscheckt – also vorher ein &#8222;git pull&#8220; ausgeführt hat.</p>
<h3>Developing auf dem Branch</h3>
<p><strong>git add . &amp;&amp; git commit -m “#myNewBranch add css file”</strong><br />
oder<br />
<strong>git add layout/mynewtask.css &amp;&amp; git commit -m “#myNewBranch add css file”</strong></p>
<figure id="attachment_392" aria-describedby="caption-attachment-392" style="width: 300px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Developing-auf-dem-Branch.jpg" rel="attachment wp-att-392"><img loading="lazy" decoding="async" class="wp-image-392 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Developing-auf-dem-Branch-300x200.jpg" alt="Developing auf dem Branch" width="300" height="200" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Developing-auf-dem-Branch-300x200.jpg 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Developing-auf-dem-Branch-768x512.jpg 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Developing-auf-dem-Branch-1024x683.jpg 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Developing-auf-dem-Branch.jpg 1920w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Developing-auf-dem-Branch-300x200@2x.jpg 600w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Developing-auf-dem-Branch-768x512@2x.jpg 1536w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-392" class="wp-caption-text">Developing auf dem Branch</figcaption></figure>
<p>Generell soll ja bei jeder funktionierenden Änderung ein Commit gemacht werden. Hier ist Disziplin gefragt. Grafische Tools wie Sourcetree verleiten jedoch dazu, dies zu einem späteren Zeitpunkt zu machen. Hier kann man sehr einfach einzelne geänderte Zeilen separaten Commits zuweisen. Das bedeutet leider noch lange nicht, dass der Commit tatsächlich alles tut, was er soll, und wie gewünscht funktioniert hat.</p>
<p>Insofern ist es besser, regelmäßig kleine Commits zu machen. Der Git-Add-Befehl dient dabei einmal für das separate File und einmal für alles seit dem letzten Commit. Auch hier gilt: Regelmäßige und sinnvolle Commits machen einem das Leben leichter und sind effektiver. Vorher ist es zudem immer sinnvoll, sich die aktuellen Änderungen mit &#8222;git status&#8220; noch einmal anzeigen zu lassen. Denn schließlich kommt es vor, dass man etwas übersehen hat. Das trifft auch auf von der Applikation generierte Files zu, die eventuell noch über .gitignore ausgeschlossen werden müssen.</p>
<h3>Commit Messages</h3>
<figure id="attachment_394" aria-describedby="caption-attachment-394" style="width: 300px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Commit-Messages.jpg" rel="attachment wp-att-394"><img loading="lazy" decoding="async" class="wp-image-394 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Commit-Messages-300x200.jpg" alt="Commit-Messages" width="300" height="200" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Commit-Messages-300x200.jpg 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Commit-Messages-768x512.jpg 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Commit-Messages-1024x682.jpg 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Commit-Messages.jpg 1280w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Commit-Messages-300x200@2x.jpg 600w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-394" class="wp-caption-text">Commit Messages</figcaption></figure>
<p>Damit man die Historie einer Entwicklung nachvollziehen kann, sind Commit Messages wichtig. Diese müssen aussagekräftig sein und beinhalten idealerweise eine <a href="http://www.entwicklungshilfe.nrw/seminare/phpstorm-effektiv-mit-ticketsystem-nutzen/">Ticket-ID</a>. Denn somit können die Arbeitsschritte direkt zugeordnet werden. Nicht aussagekräftige Commit Messages indes schaden dem Team und einem selbst.</p>
<p>Mit <a href="https://git-scm.com/book/uz/v2/Customizing-Git-Git-Hooks" target="_blank" rel="noopener noreferrer">Pre Hooks</a> ist es möglich, Commits ohne Ticket-ID direkt zu unterbinden. Das kann sogar erweitert werden, dass sich das Ticket im richtigen Status befinden muss. Solche Maßnahmen einzuführen und umzusetzen, ist allerdings nicht so einfach wie deren technische Implementierung.</p>
<p>Es gibt einige Spaßseiten zu dem Thema wie beispielsweise <a href="http://www.commitlogsfromlastnight.com/" target="_blank" rel="noopener noreferrer">Commits from last night</a> – dabei ist das Thema doch eigentlich sehr ernst. Denn es dient der Dokumentation der eigenen Arbeit und zeigt, dass du ein Profi bist. Soll heißen: Arbeite immer möglichst professionell. Das ist wichtig und richtig.</p>
<h2>Git-flow installieren und sofort nutzen</h2>
<p><strong>git flow feature start myNewBranch</strong><br />
<strong>git flow feature finish myNewBranch</strong></p>
<figure id="attachment_395" aria-describedby="caption-attachment-395" style="width: 300px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-flow.jpg" rel="attachment wp-att-395"><img loading="lazy" decoding="async" class="wp-image-395 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-flow-300x200.jpg" alt="Git-Flow" width="300" height="200" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-flow-300x200.jpg 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-flow-768x512.jpg 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-flow-1024x683.jpg 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-flow.jpg 1920w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-flow-300x200@2x.jpg 600w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-flow-768x512@2x.jpg 1536w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-395" class="wp-caption-text">Git-flow</figcaption></figure>
<p><a href="http://www.entwicklungshilfe.nrw/seminare/git-flow-git-branching-model-fuer-agile-software-projekte/">Git-flow</a> hat sich in vielen Projekten bewährt und wird vor allem gerne bei neuen Projekten eingesetzt. Auf dem <a href="http://www.rogoit.de/webdesign-typo3-blog-duisburg/category/mac-snippet/" target="_blank" rel="noopener noreferrer">Mac</a> ist es schnell mit <a href="http://brew.sh/" target="_blank" rel="noopener noreferrer">Homebrew</a> installiert, und nach einem &#8222;git flow init&#8220; kann es nach einigen Bestätigungen der Default-Settings sofort eingesetzt werden. Mit dem oben aufgeführten Start-Befehl wird dabei ein neuer Branch aus dem aktuellen Develop Branch erstellt. Danach kann man sein Feature entwickeln und mit dem Finish-Befehl wieder abschließen. Hier wird ein Merge zurück in den Develop Branch ausgeführt und der Feature Branch sofort gelöscht. Falls man das aber nicht unbedingt möchte, geht es auch mit Hotfixes und Releases.</p>
<p>Eine gute Übersicht zu all dem bietet <a href="http://danielkummer.github.io/git-flow-cheatsheet/" target="_blank" rel="noopener noreferrer">http://danielkummer.github.io/git-flow-cheatsheet/</a>. Ausführliche Informationen zu Git-flow gibt es außerdem unter <a href="https://github.com/nvie/gitflow" target="_blank" rel="noopener noreferrer">https://github.com/nvie/gitflow</a>. Wir haben uns im praktischen Einsatz dazu entschlossen, nach dem Git-Flow-Workflow zu arbeiten, die zusammengeführten Branches allerdings zu archivieren und zu erhalten.</p>
<h2>Git-Workflow nur auf der Command Line</h2>
<figure id="attachment_386" aria-describedby="caption-attachment-386" style="width: 337px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-auf-der-Command-Line-CLI.png" rel="attachment wp-att-386"><img loading="lazy" decoding="async" class="wp-image-386 size-full" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-auf-der-Command-Line-CLI.png" alt="Git auf der Command Line CLI" width="337" height="208" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-auf-der-Command-Line-CLI.png 337w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-auf-der-Command-Line-CLI-300x185.png 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-auf-der-Command-Line-CLI-103x65.png 103w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-auf-der-Command-Line-CLI-163x102.png 163w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-auf-der-Command-Line-CLI-103x65@2x.png 206w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-auf-der-Command-Line-CLI-163x102@2x.png 326w" sizes="auto, (max-width: 337px) 100vw, 337px" /></a><figcaption id="caption-attachment-386" class="wp-caption-text">Git auf der Command Line CLI</figcaption></figure>
<p>Der Git-flow ist eine Zusammenfassung von Befehlen, die man selbstverständlich auch eigenhändig und einzeln ausführen kann. In meinen Augen ist aber ein großer Nachteil, dass Branches, die zurückgemerged wurden, auch gelöscht werden.</p>
<p>Persönlich finde ich es zudem besser, Bugfixes auf dem Feature Branch durchzuführen und sich öfter mit dem aktuellen Stand abzugleichen. So kann man die Arbeit auf einem Feature besser dokumentieren. Das Ganze geht manuell auf der Command Line – CLI – wie folgt:</p>
<p>// Aktuellen Develop Branch auschecken und aktualisieren<br />
<strong>git checkout develop</strong><br />
<strong> git pull</strong></p>
<p>// Feature Branch für Jira Ticket SUP-123 erstellen<br />
<strong>git checkout -b feature/SUP-123</strong></p>
<p>// Commits auf das Ticket<br />
<strong>git status</strong><br />
<strong>git add . &amp;&amp; git commit -m “#SUP-123 what i have done”</strong></p>
<p>// Git Pushes sollten mindestens jeden Abend durchgeführt werden – und zwar auf jeden Fall vor den Merges, egal in welche Richtung<br />
<strong>git status</strong><br />
<strong>git push</strong></p>
<p>// Feature Branch zurück in Develop bringen<br />
<strong>git checkout develop</strong><br />
<strong>git pull</strong><br />
<strong>git merge feature/SUP-123</strong><br />
<strong>git status</strong></p>
<p>// Tag setzen<br />
<strong>git tag -a v1.2.0 -m “Version v1.2.0”</strong><br />
// Push mit Tags<br />
<strong>git push &amp;&amp; git push &#8211;tags</strong></p>
<p>Die oben aufgeführten Commands in <a href="http://www.entwicklungshilfe.nrw/seminare/oh-my-zsh-mit-agnoster-theme/">oh-my-zsh</a><br />
// Aktuellen Develop Branch auschecken und aktualisieren<br />
<strong>gco develop</strong><br />
<strong>gl</strong></p>
<p>// Feature Branch für Jira Ticket SUP-123 erstellen<br />
<strong>gcb feature/SUP-123</strong></p>
<p>// Commits auf das Ticket<br />
<strong>gst</strong><br />
<strong>gaa &amp;&amp; gcmsg “#SUP-123 was ich gerade getan habe”</strong><br />
<strong>gst</strong></p>
<p>// Git Push sollte mindestens jeden Abend durchgeführt werden – und zwar auf jeden Fall vor den Merges, egal in welche Richtung<br />
<strong>gst</strong><br />
<strong>gp</strong></p>
<p>// Feature Branch zurück in Develop bringen<br />
<strong>gco develop</strong><br />
<strong>gl</strong><br />
<strong>gm feature/SUP-123</strong><br />
<strong>gst</strong></p>
<p>// Tag setzen<br />
<strong>git tag -a v1.2.0 -m “Version v1.2.0”</strong></p>
<p>// Push mit Tags<br />
<strong>gp &amp;&amp; gp &#8211;tags</strong></p>
<p>Mit oh-my-zsh sind eine Vielzahl von Git Commands als Alias abgelegt. Im praktischen Einsatz kommen in meinen Augen die oben abgebildeten zum Tragen. Allein gaa &amp;&amp; gcmsg &#8222;my message&#8220; bringen einem sehr viel, da sie ein häufiger Anwendungsfall sind. Auch gc für git checkout geht schnell in Fleisch und Blut über.</p>
<h2>Probleme mit Git</h2>
<p><a href="https://www.ralfebert.de/git/mergekonflikte-beheben/" target="_blank" rel="noopener noreferrer">Git-Konflikte</a> sind ein großes Thema bei Git und natürlich auch Themen wie Rebase. Aber in diesem Artikel gehe ich nicht zusätzlich auf diese Themen ein. In Zukunft werden wir hier in unserem <a href="http://www.entwicklungshilfe.nrw/blog/">Webdevelopment-Blog</a> das Thema Git auch in anderen Zusammenhängen aufgreifen. Auch gehe ich nicht auf Tools, wie <a href="https://github.com/jonas/tig" target="_blank" rel="noopener noreferrer">Tig</a> ein. Aber natürlich ist es wichtig und richtig, mit visuellen Tools zu arbeiten.</p>
<h2>Fazit zu Git auf der Command Line CLI</h2>
<p>Git ist in der heutigen Zeit des Webdevelopments der Quasi-Standard. Jeder Entwickler, egal ob Frontend oder Backend, muss damit umgehen können. Man braucht und darf keine Ausreden bei der Nutzung einer Command Line haben. Nur so wird man zum Profi – sonst ist man nur ein Anwender. Ein User.</p>
<p>In diesem Artikel ist ein einfaches Beispiel über die Entwicklung eines <a href="https://www.atlassian.com/git/tutorials/comparing-workflows/" target="_blank" rel="noopener noreferrer">Feature Branches</a> abgebildet. Man sieht ganz deutlich, dass nur wenige Commands nötig sind. Es ist wichtig, diese einfachen Vorgänge zu 100 Prozent auf der Command Line durchführen zu können und dies auch regelmäßig zu tun. Nur so lernt man Git richtig.</p>
<h2>Unsere Git-PHP-Schulung</h2>
<figure id="attachment_396" aria-describedby="caption-attachment-396" style="width: 300px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/git-flow-php-schulung.jpg" rel="attachment wp-att-396"><img loading="lazy" decoding="async" class="wp-image-396 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/git-flow-php-schulung-300x143.jpg" alt="Git-Flow PHP-Schulung" width="300" height="143" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/git-flow-php-schulung-300x143.jpg 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/git-flow-php-schulung-768x365.jpg 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/git-flow-php-schulung-702x336.jpg 702w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/git-flow-php-schulung.jpg 800w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/git-flow-php-schulung-300x143@2x.jpg 600w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-396" class="wp-caption-text">Git-flow: PHP-Schulung</figcaption></figure>
<p>Git wird von vielen Webdevelopern benutzt. Sie haben es aber leider häufig nicht verinnerlicht oder verstanden, warum man damit genau so arbeitet, wie man es tut. In unserer Schulung gehen wir ganz praktisch vor und erklären Git von den Grundlagen bis zu praktischen und etablierten Workflows. Wir gehen auf die Anwendungsfehler ein und geben unsere persönliche Erfahrung direkt an die Teilnehmer weiter. Es ist eine sehr individuelle Intensiv-Schulung. Alle Informationen zu dem Thema gibt es auf<br />
<a href="http://www.entwicklungshilfe.nrw/seminare/git-flow-git-branching-model-fuer-agile-software-projekte/">http://www.entwicklungshilfe.nrw/seminare/git-flow-git-branching-model-fuer-agile-software-projekte/</a></p>
<p><em>Wie nutzt du Git bislang? Hast du es schon mal per Command Line versucht, und wie sind da ggf. deine Erfahrungswerte?</em></p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/02/11/git-auf-der-command-line-cli/">Git auf der Command Line CLI einsetzen</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://entwicklungshilfe.nrw/blog/2016/02/11/git-auf-der-command-line-cli/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PhpStorm mit dem Ticketsystem Redmine nutzen</title>
		<link>https://entwicklungshilfe.nrw/blog/2016/01/31/phpstorm-mit-ticketsystem-redmine-nutzen/</link>
					<comments>https://entwicklungshilfe.nrw/blog/2016/01/31/phpstorm-mit-ticketsystem-redmine-nutzen/#respond</comments>
		
		<dc:creator><![CDATA[Andreas Mautz]]></dc:creator>
		<pubDate>Sun, 31 Jan 2016 18:57:11 +0000</pubDate>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Entwicklertools]]></category>
		<category><![CDATA[Configuration]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Infrastruktur]]></category>
		<category><![CDATA[Seminar]]></category>
		<category><![CDATA[Training]]></category>
		<category><![CDATA[Versionskontrolle]]></category>
		<category><![CDATA[Workshop]]></category>
		<guid isPermaLink="false">http://www.entwicklungshilfe.nrw/blog/?p=305</guid>

					<description><![CDATA[<p>In diesem Tutorial für Webdeveloper zeige ich, wie man die Entwicklungsumgebung PhpStorm mit dem Ticketsystem Redmine verbindet und das Tasksystem von PhpStorm zusammen mit git-flow als Workflow umsetzen kann. Voraussetzungen für einen erfolgreichen Workflow Grundlage für den hier gezeigten Workflow sind PhpStorm als IDE mit installiertem git-flow-Plugin sowie ein funktionierendes Ticketsystem Redmine. Natürlich gibt es Alternativen zu [&#8230;]</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/01/31/phpstorm-mit-ticketsystem-redmine-nutzen/">PhpStorm mit dem Ticketsystem Redmine nutzen</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>In diesem Tutorial für Webdeveloper zeige ich, wie man die Entwicklungsumgebung PhpStorm mit dem Ticketsystem Redmine verbindet und das Tasksystem von PhpStorm zusammen mit git-flow als Workflow umsetzen kann.</p>
<h3>Voraussetzungen für einen erfolgreichen Workflow</h3>
<p>Grundlage für den hier gezeigten Workflow sind <a href="https://www.jetbrains.com/phpstorm/" target="_blank" rel="noopener noreferrer">PhpStorm</a> als IDE mit installiertem <a href="https://plugins.jetbrains.com/plugin/7315" target="_blank" rel="noopener noreferrer">git-flow-Plugin</a> sowie ein funktionierendes Ticketsystem <a href="http://www.redmine.org/" target="_blank" rel="noopener noreferrer">Redmine</a>. Natürlich gibt es Alternativen zu dieser Kombination. PhpStorm arbeitet mit sehr vielen Systemen zusammen, und auch andere IDEs haben ähnliche Funktionen. Der Workflow im Versionskontrollsystem basiert auf unserer <a href="http://presentations.entwicklungshilfe.nrw/git_flow.html">git-flow-Präsentation</a> und ist aus meiner Sicht zwar im Feinen anpassbar, im Groben aber alternativlos.</p>
<h3>Ticketsystem Redmine richtig einstellen</h3>
<p>Das Ticketsystem sollte von außen erreichbar sein. Der zur Verknüpfung benutzte User sollte im Ticketsystem aktiv sein und Projekte und Tasks – im Weiteren auch Issues genannt – zugewiesen haben. Zusätzlich muss die REST-Api in der Konfiguration des Ticketsystems aktiviert sein.</p>
<figure id="attachment_322" aria-describedby="caption-attachment-322" style="width: 1024px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-322 size-large" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/redmine_setting-1024x148.png" alt="Einstellungen im Ticketsystem redmine für PhpStorm" width="1024" height="148" /><figcaption id="caption-attachment-322" class="wp-caption-text">Einstellungen im Ticketsystem redmine für PhpStorm</figcaption></figure>
<h3>In PhpStorm geht es weiter</h3>
<p>In PhpStorm geht man zunächst über die Tastenkombi cmd+&#8220;,&#8220; (Mac) in die Einstellungen und navigiert zu Tools -&gt; Tasks -&gt; Servers. Dort setzt man nach Auswahl des Ticketsystems die URL und Zugangsdaten zu seinem Ticketsystem.</p>
<figure id="attachment_314" aria-describedby="caption-attachment-314" style="width: 1024px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-314 size-large" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_task_server-1024x689.png" alt="PhpStorm-Einstellungen für die Verbindung mit dem Ticketsystem" width="1024" height="689" /><figcaption id="caption-attachment-314" class="wp-caption-text">PhpStorm-Einstellungen für die Verbindung mit dem Ticketsystem</figcaption></figure>
<p>Ein Klick auf den Test-Button liefert das Ergebnis:</p>
<figure id="attachment_308" aria-describedby="caption-attachment-308" style="width: 1024px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-308 size-large" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_settings-1024x420.png" alt="PhpStorm mit dem Ticketsystem Redmine" width="1024" height="420" /><figcaption id="caption-attachment-308" class="wp-caption-text">PhpStorm mit dem Ticketsystem Redmine</figcaption></figure>
<p>Im zweiten Reiter stellt man die Commit-Einstellungen ein. Das Ticketsystem Redmine ist in der Lage, Commit-Nachrichten auszulesen und darauf zu reagieren. Eine sinnvolle Einstellung zur Automatisierung spart hier wertvolle Zeit.</p>
<figure id="attachment_313" aria-describedby="caption-attachment-313" style="width: 1024px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-313 size-large" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_tasks_settings_2-1024x682.png" alt="Einstellungen in PhpStorm für die Verbindung mit dem Ticketsystem" width="1024" height="682" /><figcaption id="caption-attachment-313" class="wp-caption-text">Einstellungen in PhpStorm für die Verbindung mit dem Ticketsystem</figcaption></figure>
<h2>Optimaler Workflow in PhpStorm mit dem Ticketsystem Redmine</h2>
<p>Die Voraussetzungen sind hier ein Projekt im ausgecheckten develop-Branch, ein vorhandenes Ticket und eine eingerichtete Entwicklungsumgebung.</p>
<p>Die Steuerungsleiste für das Taskmanagement befindet sich im rechten oberen Bereich.</p>
<figure id="attachment_307" aria-describedby="caption-attachment-307" style="width: 838px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-307 size-full" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_settings_server_task.png" alt="Leiste für die Ticketsystemsteuerung" width="838" height="52" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_settings_server_task.png 838w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_settings_server_task-300x19.png 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_settings_server_task-768x48.png 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_settings_server_task-300x19@2x.png 600w" sizes="auto, (max-width: 838px) 100vw, 838px" /><figcaption id="caption-attachment-307" class="wp-caption-text">Leiste für die Ticketsystemsteuerung</figcaption></figure>
<p>Über das Dropdown kommt man in den &#8222;Task öffnen&#8220;-Dialog.</p>
<figure id="attachment_321" aria-describedby="caption-attachment-321" style="width: 750px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-321 size-full" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_open_task-e1454265308986.png" alt="Öffnen einer Issue in PhpStorm" width="750" height="401" /><figcaption id="caption-attachment-321" class="wp-caption-text">Öffnen einer Issue in PhpStorm</figcaption></figure>
<p>Nach erfolgreichem Öffnen eines Tasks sollte man eine für den Task eingerichtete Changelist in PhpStorm und auf Ebene der Versionskontrolle einen Feature-Branch ausgecheckt haben.</p>
<figure id="attachment_312" aria-describedby="caption-attachment-312" style="width: 1024px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-312 size-large" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_changelist2-1024x361.png" alt="Fortschritt im PHP-Projekt" width="1024" height="361" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_changelist2-1024x361.png 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_changelist2-300x106.png 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_changelist2-768x271.png 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_changelist2-1024x361@2x.png 2048w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_changelist2-300x106@2x.png 600w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_changelist2-768x271@2x.png 1536w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption id="caption-attachment-312" class="wp-caption-text">Fortschritt im PHP-Projekt</figcaption></figure>
<p>Sollte man seine relevanten Entwicklungen lokal abgeschlossen haben, kommt der Zeitpunkt, an dem man seinen Code committet. Durch die Nutzung der taskrelevanten Changelisten ist dies selbst bei Bearbeitung mehrerer Issues in einem Projekt durchschaubar. Zudem verringern die voreingestellten Informationen aus dem Ticketsystem die manuell einzugebenden Informationen.</p>
<figure id="attachment_311" aria-describedby="caption-attachment-311" style="width: 1024px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-311 size-large" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_commit-1024x772.png" alt="Commit der neuen Dateien" width="1024" height="772" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_commit-1024x772.png 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_commit-300x226.png 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_commit-768x579.png 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_commit.png 1517w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_commit-300x226@2x.png 600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption id="caption-attachment-311" class="wp-caption-text">Commit der neuen Dateien</figcaption></figure>
<p>Vor dem anschließenden Push zeigt PhpStorm eine Zusammenfassung der Änderungen.</p>
<figure id="attachment_320" aria-describedby="caption-attachment-320" style="width: 1024px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-320 size-large" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_push-1024x1008.png" alt="Push in unser zentrales Versionskontrollsystem" width="1024" height="1008" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_push-1024x1008.png 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_push-300x295.png 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_push-768x756.png 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_push.png 1170w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_push-300x295@2x.png 600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption id="caption-attachment-320" class="wp-caption-text">Push in unser zentrales Versionskontrollsystem</figcaption></figure>
<p>Als Abschluss muss man das Feature leider noch manuell über das git-flow-Plugin schließen, aber ich hoffe, dass das in naher Zukunft automatisiert wird.</p>
<figure id="attachment_317" aria-describedby="caption-attachment-317" style="width: 526px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-317 size-full" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_gitflow-e1454265851423.png" alt="Der Feature Branch wird geschlossen" width="526" height="351" /><figcaption id="caption-attachment-317" class="wp-caption-text">Der Feature Branch wird geschlossen</figcaption></figure>
<p>Als Meldung sollte PhpStorm einblenden, dass der Feature-Branch erfolgreich zurückgemerged wurde.</p>
<figure id="attachment_318" aria-describedby="caption-attachment-318" style="width: 750px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-318 size-full" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_tasks-e1454265896201.png" alt="Erfolgsmeldung aus PhpStorm für unseren Workflow" width="750" height="112" /><figcaption id="caption-attachment-318" class="wp-caption-text">Erfolgsmeldung aus PhpStorm für unseren Workflow</figcaption></figure>
<p>Es kann zudem vorkommen, dass PhpStorm die Changelist nicht löscht. Um die Ordnung nicht zu verlieren, hilft das manuelle Löschen.</p>
<figure id="attachment_316" aria-describedby="caption-attachment-316" style="width: 750px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-316 size-full" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_changelist-e1454265959607.png" alt="Manuelles Löschen der Changelist in PhpStorm" width="750" height="441" /><figcaption id="caption-attachment-316" class="wp-caption-text">Manuelles Löschen der Changelist in PhpStorm</figcaption></figure>
<p>Außerdem kann es helfen, bei zu vielen Issues in der Liste auch diese manuell zu löschen.</p>
<figure id="attachment_315" aria-describedby="caption-attachment-315" style="width: 750px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-315 size-full" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_tasks_2-e1454266031571.png" alt="Entfernen der Issue aus der Taskliste" width="750" height="218" /><figcaption id="caption-attachment-315" class="wp-caption-text">Entfernen der Issue aus der Taskliste</figcaption></figure>
<h3>Überprüfung in der Versionskontrolle und im Ticketsystem Redmine</h3>
<p>Wer ähnlich wie wir <a href="http://www.entwicklungshilfe.nrw/blog/ticketsystem-mit-versionskontrolle/">Redmine mit gitolite und dem redmine git hosting</a> nutzt, kann jetzt in seinem Projekt bei Redmine im Projektarchiv seinen neuen Workflow überprüfen.</p>
<figure id="attachment_309" aria-describedby="caption-attachment-309" style="width: 1024px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-309 size-large" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/workflow_redmine-1024x162.png" alt="Workflow Ansicht im Ticketsystem Redmine" width="1024" height="162" /><figcaption id="caption-attachment-309" class="wp-caption-text">Workflow-Ansicht im Ticketsystem Redmine</figcaption></figure>
<p>Weiterführende Informationen zum Beispiel vom PhpStorm-Hersteller Jetbrains bekommt ihr <a href="https://www.jetbrains.com/phpstorm/help/tasks.html" target="_blank" rel="noopener noreferrer">hier</a>.</p>
<p><em>Nutzt ihr in euren PHP-Projekten eine andere Kombination von Ticketsystem, Versionskontrolle und IDE? Wenn ja, dann schreibt uns hier doch bitte mal, welche das sind. Denn von einem solchen Know-how-Austausch profitieren ja letztlich alle. Die oben beschriebene Kombination <a href="http://www.entwicklungshilfe.nrw/seminare/phpstorm-effektiv-mit-ticketsystem-nutzen/">schulen</a> wir übrigens auch.</em></p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/01/31/phpstorm-mit-ticketsystem-redmine-nutzen/">PhpStorm mit dem Ticketsystem Redmine nutzen</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://entwicklungshilfe.nrw/blog/2016/01/31/phpstorm-mit-ticketsystem-redmine-nutzen/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Continuous Integration: Eine Einführung in PHPCI</title>
		<link>https://entwicklungshilfe.nrw/blog/2016/01/21/continuous-integration-mit-phpci/</link>
					<comments>https://entwicklungshilfe.nrw/blog/2016/01/21/continuous-integration-mit-phpci/#comments</comments>
		
		<dc:creator><![CDATA[Andreas Mautz]]></dc:creator>
		<pubDate>Thu, 21 Jan 2016 08:25:06 +0000</pubDate>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Software Qualität]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<guid isPermaLink="false">http://www.entwicklungshilfe.nrw/blog/?p=196</guid>

					<description><![CDATA[<p>Tools für Continuous Integration dienen dem automatischen Testing von Code in einer Entwicklungsumgebung. In diesem Beitrag erfahrt ihr zunächst einmal, wie man PHP Continuous Integration installiert. Continuous what? Als Dozent für die PHP-Schulungen von Entwicklungshilfe NRW interessiere ich mich über die reine PHP-Entwicklung hinaus für das Thema Continuous Integration (CI). Neben der lokalen Entwicklung mit Tools wie Vagrant [&#8230;]</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/01/21/continuous-integration-mit-phpci/">Continuous Integration: Eine Einführung in PHPCI</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Tools für Continuous Integration dienen dem automatischen Testing von Code in einer Entwicklungsumgebung. In diesem Beitrag erfahrt ihr zunächst einmal, wie man PHP Continuous Integration installiert.</p>
<figure id="attachment_227" aria-describedby="caption-attachment-227" style="width: 300px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Continuous-Integration-PHPCI.jpg" rel="attachment wp-att-227"><img loading="lazy" decoding="async" class="wp-image-227 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Continuous-Integration-PHPCI-300x200.jpg" alt="Continuous Integration: Eine Einführung in PHPCI" width="300" height="200" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Continuous-Integration-PHPCI-300x200.jpg 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Continuous-Integration-PHPCI-768x512.jpg 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Continuous-Integration-PHPCI-1024x683.jpg 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Continuous-Integration-PHPCI.jpg 1920w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Continuous-Integration-PHPCI-300x200@2x.jpg 600w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/Continuous-Integration-PHPCI-768x512@2x.jpg 1536w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-227" class="wp-caption-text">Continuous Integration: Eine Einführung in PHPCI</figcaption></figure>
<h2>Continuous what?</h2>
<p>Als Dozent für die PHP-Schulungen von Entwicklungshilfe NRW interessiere ich mich über die reine PHP-Entwicklung hinaus für das Thema Continuous Integration (CI). Neben der lokalen Entwicklung mit Tools wie Vagrant und PhpStorm zur schnellen und guten Programmierung an PHP-Applikationen ist eine stabile Pipeline zum Testen und Ausliefern (Deployment) des Codes Gold wert. Funktionierende Automatisierung spart immer Zeit und Geld. Wenn zusätzlich dabei noch getestet wird, schlafe ich als Entwickler direkt ruhiger. CI-Tools machen genau das: Sie testen in einer Entwicklungsumgebung euren Code. Jeder Durchlauf eines Prozesses wird dabei &#8222;Build&#8220; genannt. Ziel ist es, durch automatisierte Tests und die vorherige saubere Entwicklung einen fehlerfreien Build auszuliefern.</p>
<p>Vielen Entwicklern wird <a href="http://jenkins-ci.org/" target="_blank" rel="noopener noreferrer">Jenkins</a> (bzw. Hudson) ein Begriff sein. Wer andere Erfahrungen mit ähnlichen Tools gemacht hat, kann das gerne als Kommentar hier mit einbringen.</p>
<h1>PHPCI als Continuous Integration Tool</h1>
<p>Heute gebe ich eine kleine Einführung in PHP Continuous Integration, kurz <a href="https://www.phptesting.org/" target="_blank" rel="noopener noreferrer">PHPCI</a>. Als PHP-Entwickler habe ich zwar gute Erfahrungen mit Jenkins gemacht – ich finde aber den Ansatz von PHPCI besser, als CI-Tool für PHP-Projekte in PHP geschrieben zu sein. So verstehe ich als Entwickler das Tool besser. Obwohl PHPCI noch <a href="https://www.phptesting.org/news" target="_blank" rel="noopener noreferrer">ein recht junges Projekt ist</a>, finde ich die derzeitige Funktion schon brauchbar, und es macht Spaß, damit zu experimentieren. Das Github-Projekt findet ihr <a href="https://github.com/Block8/PHPCI" target="_blank" rel="noopener noreferrer">hier</a>. Doch vor dem Vergnügen kommt erstmal kurz die Arbeit, sprich die Installation. Als Voraussetzung wird hier von einem Debian-basierten Webserver mit installiertem Apache und MySQL-Server ausgegangen. Paketinstallationen auf einem Server sowie das Tool <a href="https://getcomposer.org/" target="_blank" rel="noopener noreferrer">composer</a> sollten euch geläufig sein.</p>
<h2>Installation von PHPCI</h2>
<p>Zunächst wechseln wir in das Webverzeichnis des Servers (default /var/www):</p>
<pre class="lang:default decode:true">cd /var/www
</pre>
<p>Nun erstellen wir per composer das PHPCI-Projekt. Bei dem letzten Befehl solltet ihr eure Datenbank-Zugangsdaten zur Hand haben.</p>
<pre class="lang:default decode:true">composer create-project block8/phpci phpci --keep-vcs --no-dev
cd phpci &amp;&amp; composer install
./console phpci:install
</pre>
<p>Das Ergebnis sollte so aussehen:</p>
<figure id="attachment_198" aria-describedby="caption-attachment-198" style="width: 1024px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-198 size-large" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpci_console-1024x346.png" alt="Konsolenausgabe bei der Continuous Integration Tool Installation" width="1024" height="346" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpci_console-1024x346.png 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpci_console-300x101.png 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpci_console-768x259.png 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpci_console-1024x346@2x.png 2048w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpci_console-300x101@2x.png 600w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpci_console-768x259@2x.png 1536w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption id="caption-attachment-198" class="wp-caption-text">Konsolenausgabe bei der Continuous Integration Tool Installation</figcaption></figure>
<p>Eine einfache Vhost-Konfigurationsdatei, die dem Apache hinzugefügt und aktiviert wird, reicht zum Aufrufen unseres neuen Tools zur Continuous Integration:</p>
<pre class="lang:default decode:true">    ServerAdmin __ADMIN__@__SERVER__
    ServerName phpci.__SERVER__
    DocumentRoot /var/www/phpci/public
    
        DirectoryIndex index.php
        Options Indexes FollowSymlinks MultiViews
        Require all granted
        AllowOverride All
        
    LogLevel warn

</pre>
<p>Solltet ihr nicht mit einer Seite wie dieser hier empfangen werden, schaut bitte in die <a href="https://www.phptesting.org/wiki/Installing-PHPCI" target="_blank" rel="noopener noreferrer">Installationshilfe</a> auf der PHPCI-Seite nach oder schreibt uns hier.</p>
<p>Wenn ihr jetzt die eingetragene URL aufruft, seht ihr die Startseite eures neuen CI-Tools, und ihr könnt euch einloggen.</p>
<p>Dieser komplette Installationsvorgang dauert keine 30 Minuten. PHPCI ist eine kostenlose, quelloffene Variante, die euch in die Lage versetzt, sehr schnell eine eigene Build-Pipeline als Grundlage für eine Continuous-Integration-, Continuous-Delivery- oder Continuous-Deployment-Strategie aufzubauen. Um die beiden letztgenannten Punkte geht es an dieser Stelle allerdings nicht.</p>
<h2>Weitere Posts zum Thema Continuous Integration</h2>
<p>Ich versuche, hier so schnell wie möglich weitere Anleitungen über PHPCI zu posten. Geplant sind derzeit auf jeden Fall:</p>
<ul>
<li>Aufsetzen eines versionskontrollebasierten PHP-Projektes in PHPCI</li>
<li>Unit-Tests mit PHPCI</li>
<li>Acceptance-Tests mit Codeception in PHPCI</li>
<li>Weitere Tests wie Mess Detection und Code Coverage</li>
</ul>
<p><em>Ich hoffe, meine kurze Anleitung war hilfreich für euch. Wenn ihr noch Fragen dazu habt, könnt ihr diese gerne unter Verwendung der Kommentarfunktion stellen. Ansonsten verlinke ich relevante Posts hier.</em></p>
<p>Einen detaillierten Überblick über unsere PHP-Schulungen für Webentwickler findet ihr übrigens auf der <a href="http://www.entwicklungshilfe.nrw/">Website von Entwicklungshilfe NRW</a>.</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/01/21/continuous-integration-mit-phpci/">Continuous Integration: Eine Einführung in PHPCI</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://entwicklungshilfe.nrw/blog/2016/01/21/continuous-integration-mit-phpci/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Git ignore file mode global oder lokal setzen?</title>
		<link>https://entwicklungshilfe.nrw/blog/2016/01/13/git-ignore-file-mode-global-lokal/</link>
					<comments>https://entwicklungshilfe.nrw/blog/2016/01/13/git-ignore-file-mode-global-lokal/#respond</comments>
		
		<dc:creator><![CDATA[Andreas Mautz]]></dc:creator>
		<pubDate>Wed, 13 Jan 2016 12:00:32 +0000</pubDate>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Entwicklertools]]></category>
		<category><![CDATA[Git]]></category>
		<guid isPermaLink="false">http://www.entwicklungshilfe.nrw/blog/?p=18</guid>

					<description><![CDATA[<p>Für die Arbeit mit der Versionsverwaltung Git müssen einige Einstellungen vorgenommen werden, damit diese effektiver eingesetzt werden kann. Manchmal ist es sinnvoll, diese global bzw. systemweit zu setzen. Etwa bei “Git ignore file mode”. Hier erfahrt ihr, wie das geht. Änderungen wie “Git ignore file mode” gehören dazu, da man diese Git-Einstellung nicht in jedem Projekt neu setzen muss. Es gibt mehrere [&#8230;]</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/01/13/git-ignore-file-mode-global-lokal/">Git ignore file mode global oder lokal setzen?</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Für die Arbeit mit der Versionsverwaltung <a href="https://git-scm.com/" target="_blank" rel="noopener noreferrer">Git</a> müssen einige Einstellungen vorgenommen werden, damit diese effektiver eingesetzt werden kann. Manchmal ist es sinnvoll, diese global bzw. systemweit zu setzen. Etwa bei “Git ignore file mode”. Hier erfahrt ihr, wie das geht.</p>
<figure id="attachment_21" aria-describedby="caption-attachment-21" style="width: 300px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/Git-ignore-file-mode-1.jpg" rel="attachment wp-att-21"><img loading="lazy" decoding="async" class="wp-image-21 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/Git-ignore-file-mode-1-300x200.jpg" alt="Git ignore file mode" width="300" height="200" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/Git-ignore-file-mode-1-300x200.jpg 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/Git-ignore-file-mode-1-768x512.jpg 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/Git-ignore-file-mode-1-1024x683.jpg 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/Git-ignore-file-mode-1.jpg 1920w, https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/Git-ignore-file-mode-1-300x200@2x.jpg 600w, https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/Git-ignore-file-mode-1-768x512@2x.jpg 1536w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-21" class="wp-caption-text">Git ignore file mode</figcaption></figure>
<p>Änderungen wie “Git ignore file mode” gehören dazu, da man diese Git-Einstellung nicht in jedem Projekt neu setzen muss. Es gibt mehrere Anwendungsfälle, die wir auch in unseren <a href="http://www.entwicklungshilfe.nrw/seminare/git-flow-git-branching-model-fuer-agile-software-projekte/">Git-Schulungen</a> vorstellen werden. Es ist sinnvoll, die Einstellung global vorzunehmen – den Befehl sollte man aber dennoch auswendig kennen, falls man mal auf einem anderen System unterwegs ist.</p>
<h2>Git ignore file mode global setzen</h2>
<pre class="lang:default decode:true " title="Git ignore file mode global">git config --global core.filemode false</pre>
<p>Die oben abgebildete Zeile setzt durch den &#8211;global-Parameter die Einstellung global für den eingeloggten User. Das ist sehr praktisch, da die Einstellung in allen Projekten benötigt wird.</p>
<h2>Git ignore file mode lokal setzen</h2>
<pre class="lang:default decode:true " title="Git ignore file mode lokal">git -c core.filemode=false diff</pre>
<p>Neben der globalen Konfiguration ist es in Git natürlich auch möglich, die Einstellung nur für das aktuelle Projekt vorzunehmen. Der oben abgebildete CLI-Befehl setzt die Konfiguration nur für das aktuelle Projekt Verzeichnis.</p>
<h2>Git filemode</h2>
<p>Es kommt vor, dass durch Benutzerrechte Änderungen im lokalen Workspace entstehen und Git diese Änderungen als Change erkennt und committen möchte. Das ist zwar technisch richtig, häufig jedoch unerwünscht. Hierfür kann man ein Setting in der Git-Konfiguration setzen. Das lässt sich lokal oder global machen. Dessen sollte man sich immer bewusst sein und wissen, dass in Zukunft eventuell berechtigte Änderungen an den Zugriffsrechten nicht wirksam werden, wenn man das Setting global gesetzt hat. Für Änderungen in diesem seltenen Fall sollte man das Repo noch einmal explizit auschecken und die gewünschten Änderungen dort vornehmen und in das Remote Repository bringen. So spart man sich das lästige Hin- und Herkonfigurieren.</p>
<h2>Weiterführende PHP-Schulung zum Thema Git</h2>
<p>Wenn ihr euch gezielt zum Thema Git weiterbilden und viele praktische Tipps für eure Arbeit erhalten möchtet, könnte euch unsere entsprechende PHP-Schulung interessieren. <a href="http://www.entwicklungshilfe.nrw/seminare/git-flow-git-branching-model-fuer-agile-software-projekte/">Infos dazu findet ihr hier</a>. Insgesamt zielen die Seminare und Workshops von Entwicklungshilfe NRW – ebenso wie unser Blog – darauf ab, Webentwicklern die Arbeit zu erleichtern und dadurch für mehr Spaß und Motivation zu sorgen. Wenn ihr euch übrigens gerade fragt, wie ihr eure Vorgesetzten vom Nutzen einer Weiterbildung überzeugen könnt, dann hilft euch vielleicht <a href="http://www.entwicklungshilfe.nrw/blog/php-schulung-vorgesetzte-ueberzeugen/">dieser Beitrag hier</a> weiter.</p>
<p><em>Falls ihr noch Fragen zum Thema Git ignore file mode habt, dann könnt ihr diese gerne in den Kommentaren stellen. Wir werden euch so schnell wie möglich antworten.</em></p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/01/13/git-ignore-file-mode-global-lokal/">Git ignore file mode global oder lokal setzen?</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://entwicklungshilfe.nrw/blog/2016/01/13/git-ignore-file-mode-global-lokal/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Ticketsystem mit Versionskontrolle</title>
		<link>https://entwicklungshilfe.nrw/blog/2015/12/29/ticketsystem-mit-versionskontrolle/</link>
					<comments>https://entwicklungshilfe.nrw/blog/2015/12/29/ticketsystem-mit-versionskontrolle/#respond</comments>
		
		<dc:creator><![CDATA[Andreas Mautz]]></dc:creator>
		<pubDate>Tue, 29 Dec 2015 12:22:16 +0000</pubDate>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[Infrastruktur]]></category>
		<category><![CDATA[Ticketsystem]]></category>
		<category><![CDATA[Versionskontrolle]]></category>
		<guid isPermaLink="false">http://www.entwicklungshilfe.nrw/blog/?p=79</guid>

					<description><![CDATA[<p>Ein Ticketsystem mit Versionskontrolle ist eine geeignete Grundlage für Freelancer und kleine Agenturen, um Softwareentwicklungsprojekte zu managen. Zudem hilft eine Versionskontrolle wie git dabei, Änderungen am Code zu deployen. Redmine 3 mit Gitolite 3 installieren Eine gelungene, kostenfreie Kombination für ein Ticketsystem mit Versionskontrolle bieten Redmine als Ticketsystem und git als Versionskontrolle. Gitolite dient dabei als Mittler, um Nutzer des [&#8230;]</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2015/12/29/ticketsystem-mit-versionskontrolle/">Ticketsystem mit Versionskontrolle</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Ein Ticketsystem mit Versionskontrolle ist eine geeignete Grundlage für Freelancer und kleine Agenturen, um Softwareentwicklungsprojekte zu managen. Zudem hilft eine Versionskontrolle wie git dabei, Änderungen am Code zu deployen.</p>
<p><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/23750809531_24c0a4b8e6_o-e1451303431955.jpg" rel="attachment wp-att-107"><img loading="lazy" decoding="async" class="wp-caption alignleft wp-image-107 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/23750809531_24c0a4b8e6_o-e1451303431955-300x197.jpg" alt="Ticketsystem mit Versionskontrolle" width="300" height="197" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/23750809531_24c0a4b8e6_o-e1451303431955-300x197.jpg 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/23750809531_24c0a4b8e6_o-e1451303431955-768x504.jpg 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/23750809531_24c0a4b8e6_o-e1451303431955-1024x672.jpg 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/23750809531_24c0a4b8e6_o-e1451303431955-214x140.jpg 214w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<h2>Redmine 3 mit Gitolite 3 installieren</h2>
<p>Eine gelungene, kostenfreie Kombination für ein Ticketsystem mit Versionskontrolle bieten <a href="http://www.redmine.org/" target="_blank" rel="noopener noreferrer">Redmine</a> als Ticketsystem und <a href="https://git-scm.com/" target="_blank" rel="noopener noreferrer">git</a> als Versionskontrolle. <a href="https://github.com/sitaramc/gitolite" target="_blank" rel="noopener noreferrer">Gitolite</a> dient dabei als Mittler, um Nutzer des Ticketsystems gegenüber dem eigenen Git-Server zu authentifizieren und so die Versionskontrolle über das Ticketsystem steuerbar zu machen. Mehr dazu gibt es im neuen Jahr in einem eigenen Blog-Beitrag, den ich dann hier verlinke.</p>
<h2>Voraussetzungen für die neue Infrastruktur</h2>
<p>Dieser Artikel ist eine Anleitung, wie man auf einem eigenen, dafür geeigneten Server diese Kombination aufsetzt.<br />
Ausgegangen wird hier von <a href="https://www.debian.org/" target="_blank" rel="noopener noreferrer">Debian</a> als Betriebssystem, und der eingeloggte User ist root. Es wird vorausgesetzt, dass man Pakete installieren und einen einfachen Editor wie vim oder nano benutzen kann.</p>
<p>Zunächst installiert man die grundlegenden Softwarepakete, die benötigt werden:</p>
<pre class="lang:default decode:true" title="benötigte Pakete für das Ticketsystem mit Versionskontrolle">apt-get install rubygems gitolite3 build-essential libssh2-1 libssh2-1-dev cmake libgpg-error-dev mysql apoache2
</pre>
<p>Anschließend werden dem System zwei User für git (&#8222;git&#8220;) und Redmine (&#8222;redmine&#8220;) hinzugefügt:</p>
<pre class="lang:default decode:true " title="User anlegen">adduser --system --shell /bin/bash --gecos 'Git Administrator' --group --disabled-password --home /opt/gitolite git
adduser --system --shell /bin/bash --gecos 'Redmine Administrator' --group --disabled-password --home /opt/redmine redmine
</pre>
<p>Da das Ticketsystem später die Kontrolle über die Versionskontrolle ausüben soll, legen wir einen SSH-Key für den User <em>redmine</em> an:</p>
<pre class="lang:default decode:true " title="redmine ssh-key">su redmine
ssh-keygen -t rsa -N '' -f ~/.ssh/redmine_gitolite_admin_id_rsa
exit
</pre>
<h2>Versionskontrolle kontrollieren</h2>
<p>Nun kann Gitolite mit</p>
<pre>dpkg-reconfigure gitolite3</pre>
<p>neu konfiguriert werden, da die Konfiguration bei Installation ein paar Settings anders setzt, als wir es gerne hätten. Die Parameter zur Konfiguration sind:<br />
user: git<br />
repos path: /opt/gitolite<br />
admin ssh-key: /opt/redmine/.ssh/redmine_gitolite_admin_id_rsa.pub</p>
<p>Redmine und Gitolite benötigen teilweise sudo-Rechte für den jeweilig anderen User, Redmine für die Installation temporär sogar darüber hinaus. Dazu konfigurieren wir unseren Server für das Ticketsystem mit Versionskontrolle mit</p>
<pre class="lang:default decode:true">visudo</pre>
<p>Folgendes wird zusätzlich eingetragen:</p>
<p># temp &#8211; *REMOVE* after installation<br />
redmine ALL=(ALL) NOPASSWD:ALL</p>
<p># redmine gitolite integration<br />
redmine ALL=(git) NOPASSWD:ALL<br />
git ALL=(redmine) NOPASSWD:ALL</p>
<h2>Installation des Ticketsystems Redmine</h2>
<p>Jetzt wird Redmine installiert. Dazu loggen wir uns als User <em>redmine</em> ein und wechseln in sein Home-Verzeichnis.</p>
<pre class="lang:default decode:true">sudo su - redmine
cd ~
</pre>
<p>Wir befinden uns jetzt in /opt/redmine, wo wir den aktuellen Code über github ziehen.</p>
<pre class="lang:default decode:true">git init
git remote add origin https://github.com/redmine/redmine.git
git fetch -p
</pre>
<p>Da wir uns im Home-Verzeichnis befinden, schließen wir noch ein paar Verzeichnisse und Dateien aus:</p>
<pre>vim .gitignore</pre>
<p>Auszuschließende Items sind zum Beispiel:<br />
.ssh/<br />
.bash_history</p>
<p>Als nächstes checken wir die aktuelle stabile Version aus.</p>
<pre class="lang:default decode:true">git add .gitignore
git commit -m 'local gitignore'
git checkout 3.1-stable
</pre>
<p>An dieser Stelle kann man jetzt noch die Quelle vom Original zu einer eigenen Quelle verschieben.</p>
<pre class="lang:default decode:true">git remote rm origin
git remote add origin __URL__
</pre>
<p>Wir benutzen Redmine mit einer MySQL-Datenbank. Sollte noch kein MySQL-Server installiert sein, bitte nachholen. Ansonsten mit</p>
<pre class="lang:default decode:true">mysql -u root -p -v -e "CREATE DATABASE redmine CHARACTER SET utf8; CREATE USER '__USER__'@'localhost' IDENTIFIED BY '__PASSWORD__'; GRANT ALL PRIVILEGES ON redmine.* TO '__USER__'@'localhost';"
</pre>
<p>__*__ bitte mit geeigneten Werten ersetzen.</p>
<p>Das oben erstellte Login verwenden wir nun zur Konfiguration von Redmine. Wir kopieren die Config-Templates und editieren diese:</p>
<pre class="lang:default decode:true">cd /opt/redmine/config
cp database.yml.example database.yml
cp configuration.yml.example configuration.yml
</pre>
<pre class="lang:default decode:true">vim database.yml
vim configuration.yml
</pre>
<p>Erweiterte Erläuterungen zur Konfiguration gibt es <a href="http://www.redmine.org/projects/redmine/wiki/RedmineInstall#Step-3-Database-connection-configuration" target="_blank" rel="noopener noreferrer">hier für die Datenbank</a> und <a href="http://www.redmine.org/projects/redmine/wiki/RedmineInstall#Configuration" target="_blank" rel="noopener noreferrer">hier für Generelles</a>.</p>
<p>Danach wechseln wir zurück ins Home-Verzeichnis und beginnen mit der Installation. Zur eigentlichen Installation von Redmine müssen wir im Gemfile noch eine Anpassung vornehmen.</p>
<pre class="lang:default decode:true">cd ~
sudo gem install bundler
nano Gemfile
</pre>
<p>Hier ändern wir die mysql2-Version auf 4.2.0, wenn man Percona als MySQL-Server in der Version 5.6 benutzen möchte.</p>
<p>Jetzt wird endlich installiert:</p>
<pre>bundle install --without development test postgresql sqlite
rake generate_secret_token
RAILS_ENV=production rake db:migrate
</pre>
<h2>Plugins für das Ticketsystem</h2>
<p>Nachdem Redmine grundlegend installiert wurde, kümmern wir uns jetzt um die Plugins:</p>
<pre class="lang:default decode:true">cd ~/plugins
git clone https://github.com/jbox-web/redmine_bootstrap_kit.git
git clone https://github.com/jbox-web/redmine_git_hosting.git
cd redmine_bootstrap_kit/
git checkout 0.2.4
cd ../redmine_git_hosting/
git checkout 1.2.0
cd ~
bundle install --without development test
bundle exec rake redmine:plugins:migrate RAILS_ENV=production NAME=redmine_git_hosting
</pre>
<p>Der eingangs erstellte SSH-Key wird jetzt in das Plugin verlinkt:</p>
<pre class="lang:default decode:true">ln -s /opt/redmine/.ssh/redmine_gitolite_admin_id_rsa /opt/redmine/plugins/redmine_git_hosting/ssh_keys/redmine_gitolite_admin_id_rsa
ln -s /opt/redmine/.ssh/redmine_gitolite_admin_id_rsa.pub /opt/redmine/plugins/redmine_git_hosting/ssh_keys/redmine_gitolite_admin_id_rsa.pub
</pre>
<h2>Das Ticketsystem mit Versionskontrolle überprüfen</h2>
<p>Wir wechseln jetzt auf die Seite des Users <em>git</em> und überprüfen Gitolite.</p>
<pre class="lang:default decode:true">sudo su - git
sed -i 's/$GL_GITCONFIG_KEYS = ""/$GL_GITCONFIG_KEYS = ".*"/g' /opt/gitolite/.gitolite.rc
exit
ssh -i .ssh/redmine_gitolite_admin_id_rsa git@localhost info
</pre>
<p>Dabei sollte eine Antwort ähnlich wie diese hier kommen:<br />
hello admin, this is git@__SERVER__ running gitolite3 3.6.1-2 (Debian) on git 2.1.4</p>
<p>R W gitolite-admin<br />
R W testing</p>
<p>Als letztes wird nun Redmine mittels des Passenger-Moduls zum Laufen gebracht. Es wird vorausgesetzt, dass ein entsprechender vhost-Eintrag existiert, der auf /opt/redmine/public verweist. Das Passenger-Modul installiert man mit</p>
<pre>passenger-install-apache2-module</pre>
<p>und trägt danach die in der Installation erzeugten Pfade in die apache-Konfiguration ein.</p>
<p><em>Bei mir hat diese Anleitung zum Aufsetzen eines Ticketsystems mit Versionskontrolle bisher immer sehr gut funktioniert. Wenn ihr Probleme habt, schreibt bitte in die Kommentare, damit diese Anleitung ständig verbessert werden kann. Gleichzeitig können wir durch den regen Ausstausch mit euch aber auch die Qualität unserer <a href="http://www.entwicklungshilfe.nrw/seminare/oh-my-zsh-mit-agnoster-theme/">PHP-Schulungen für Webentwickler</a> noch weiter erhöhen.</em></p>
<p><strong>Quellen und weiterführende Links:</strong><br />
<a href="https://github.com/redmine/redmine" target="_blank" rel="noopener noreferrer">Redmine</a><br />
<a href="http://gitolite.com/gitolite/install.html" target="_blank" rel="noopener noreferrer">Gitolite</a><br />
<a href="https://nsaunders.wordpress.com/2012/04/24/redmine-gitolite-integration/" target="_blank" rel="noopener noreferrer">Redmine und Gitolite</a><br />
<a href="https://www.redmine.org/projects/redmine/wiki/HowTo_Install_Redmine_2_integrated_with_Gitolite_2_on_Debian_Wheezy_with_Apache_and_Phusion_Passenger" target="_blank" rel="noopener noreferrer">Apache Passenger</a><br />
<a href="http://redmine-git-hosting.io/get_started/" target="_blank" rel="noopener noreferrer">Redmine git hosting</a><br />
<a href="https://www.redmine.org/plugins/redmine_git_hosting" target="_blank" rel="noopener noreferrer">Redmine git hosting Plugin-Seite</a></p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2015/12/29/ticketsystem-mit-versionskontrolle/">Ticketsystem mit Versionskontrolle</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://entwicklungshilfe.nrw/blog/2015/12/29/ticketsystem-mit-versionskontrolle/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Plugins: WordPress ohne FTP updaten</title>
		<link>https://entwicklungshilfe.nrw/blog/2015/12/16/wordpress-ohne-ftp-updaten/</link>
					<comments>https://entwicklungshilfe.nrw/blog/2015/12/16/wordpress-ohne-ftp-updaten/#respond</comments>
		
		<dc:creator><![CDATA[Andreas Mautz]]></dc:creator>
		<pubDate>Wed, 16 Dec 2015 12:39:09 +0000</pubDate>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Entwicklertools]]></category>
		<category><![CDATA[CMS Open Source]]></category>
		<category><![CDATA[Configuration]]></category>
		<category><![CDATA[Hosting]]></category>
		<category><![CDATA[Security]]></category>
		<guid isPermaLink="false">http://www.entwicklungshilfe.nrw/blog/?p=51</guid>

					<description><![CDATA[<p>WordPress ist die beliebteste Open-Source-Software für Blogs und Blogger. Doch immer wieder wird hier die Sicherheit kritisiert. Ein Dauerthema sind dabei Plugin-Updates ohne FTP. &#8222;WordPress ohne FTP updaten (oder installieren)&#8220; ist eine vielgenutzte Phrase bei der Google-Suche – kein anderes bekanntes CMS-System nutzt diese Art für die Installation und die Aktualisierungen bei Plugins. Insofern ist es [&#8230;]</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2015/12/16/wordpress-ohne-ftp-updaten/">Plugins: WordPress ohne FTP updaten</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><a href="http://wpde.org/" target="_blank" rel="noopener noreferrer">WordPress</a> ist die beliebteste Open-Source-Software für Blogs und Blogger. Doch immer wieder wird hier die <a href="http://t3n.de/magazin/fuenf-schritten-wordpress-security-erhoehen-sicheren-235764/" target="_blank" rel="noopener noreferrer">Sicherheit</a> kritisiert. Ein Dauerthema sind dabei Plugin-Updates ohne FTP.</p>
<figure id="attachment_56" aria-describedby="caption-attachment-56" style="width: 300px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/WordPress-Plugins-ohne-FTP-installieren-1.jpg" rel="attachment wp-att-56"><img loading="lazy" decoding="async" class="wp-image-56 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/WordPress-Plugins-ohne-FTP-installieren-1-300x176.jpg" alt="WordPress Plugins ohne FTP installieren" width="300" height="176" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/WordPress-Plugins-ohne-FTP-installieren-1-300x176.jpg 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/WordPress-Plugins-ohne-FTP-installieren-1-768x451.jpg 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/WordPress-Plugins-ohne-FTP-installieren-1-1024x602.jpg 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/WordPress-Plugins-ohne-FTP-installieren-1.jpg 1920w, https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/WordPress-Plugins-ohne-FTP-installieren-1-300x176@2x.jpg 600w, https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/WordPress-Plugins-ohne-FTP-installieren-1-768x451@2x.jpg 1536w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-56" class="wp-caption-text">WordPress ohne FTP updaten</figcaption></figure>
<p>&#8222;WordPress ohne FTP updaten (oder installieren)&#8220; ist eine vielgenutzte Phrase bei der Google-Suche – kein anderes bekanntes CMS-System nutzt diese Art für die Installation und die Aktualisierungen bei Plugins. Insofern ist es immer wichtig, im Vorfeld Sicherheitsmaßnahmen zu definieren und dann vor allem auch umzusetzen. Regelmäßige Updates sind ebenfalls von zentraler Bedeutung für die Sicherheit in Open-Source-Anwendungen. Das WordPress-Backend macht zuverlässig und übersichtlich auf Aktualisierungen aufmerksam.</p>
<h2>Plugins: WordPress ohne FTP updaten</h2>
<p>Damit die Installationen von WordPress ohne FTP (File Transfer Protocol) vorgenommen werden können, ist es nötig, ein Setting in der wp-config.php hinzuzufügen.</p>
<pre class="lang:default decode:true " title="wp-config.php WordPress Plugin ohne FTP">define('FS_METHOD', 'direct');</pre>
<p>Mit dem oben abgebildeten Setting ist es möglich, als eingeloggter User alle Aktualisierungen von WordPress im Backend vorzunehmen. Nach den Aktualisierungen kann man die Zeile dann wieder auskommentieren. Generell sind Updates nur durchzuführen, wenn man vorher ein vollständiges Backup erstellt hat. Zu dem Thema habe ich bereits einen Gastbeitrag in einem Online-Fachmagazin veröffentlicht.<br />
<a href="http://www.zielbar.de/blogger-erfolgreich-wordpress-einsetzen-4251/" target="_blank" rel="noopener noreferrer">http://www.zielbar.de/blogger-erfolgreich-wordpress-einsetzen-4251/</a></p>
<h2>FTP und die Frage der Sicherheit</h2>
<p>Das FTP wird gerade bei einfachen Hosting-Lösungen häufig eingesetzt. In dem Artikel <a href="http://www.it-administrator.de/themen/sicherheit/fachartikel/104843.html" target="_blank" rel="noopener noreferrer">FTP: Die unterschätzte Sicherheitslücke</a> findet man eine Auflistung möglicher Schwachstellen. (WordPress-)Updates ohne FTP sind nur eine davon. Grundsätzlich gibt es in puncto Sicherheit keinen 100-prozentigen Schutz, und außerdem gilt noch immer der Leitsatz: &#8222;<span class="_5yl5">Statistische Sicherheit: Ein System wird dann als sicher bezeichnet, wenn für den Angreifer der Aufwand für das Eindringen in das System höher ist als der daraus resultierende Nutzen. Deshalb ist es wichtig, die Hürden für einen erfolgreichen Einbruch möglichst hoch zu setzen und damit das Risiko zu reduzieren</span>&#8222;. Denn ist der Aufwand für den Angreifer zu hoch, so lässt er schnell ab. Näheres dazu (und mehr Wissenswertes zum Thema) findet man in dem <a href="https://de.wikipedia.org/wiki/Informationssicherheit" target="_blank" rel="noopener noreferrer">Wikipedia-Eintrag zu Informationssicherheit</a>.</p>
<p>Daher hat WordPress FTP als Sicherheitsbarriere eingebaut. So kann auch ein Administrator keine Plugins installieren oder aktualisieren, ohne einen FTP-Zugang zu haben. Das gibt es in anderen CMS-Systemen wie <a href="http://typo3.org" target="_blank" rel="noopener noreferrer">TYPO3</a> nicht. Professionelle Hosting-Lösungen arbeiten mit einem <a href="https://de.wikipedia.org/wiki/Secure_Shell" target="_blank" rel="noopener noreferrer">SSH-Zugriff</a>. In Kombination mit einem SSH Key hat man die Zugriffe sehr gut unter Kontrolle und kann sie gegebenenfalls sofort wieder entfernen. Zudem wird auch protokolliert, wer die Änderungen durchgeführt hat. Bei FTP-Zugängen von Webhosting-Paketen gibt es in der Regel nur einen Zugang, den dann mehrere Personen nutzen. Änderungen bedeuten also zusätzlichen Kommunikationsaufwand.</p>
<h2>WordPress Hosting Backups</h2>
<p>Auch der Verlust eines privaten Hobby-Blogs ist sehr schmerzhaft. Man muss aber kein Sicherheitsexperte werden, damit man einen Blog erfolgreich und sicher betreiben kann. Wichtig ist aber in jedem Fall ein zuverlässiges Backup, damit man jederzeit den Stand von gestern oder vorgestern wiederherstellen kann. Das beseitigt zwar nicht das Sicherheitsloch an sich, aber es begrenzt schon mal erheblich den entstandenen Schaden. Denn so geht dann maximal die Arbeit von 24 oder 48 Stunden verloren – das ist zwar immer noch ziemlich ärgerlich, aber letztlich noch überschaubar. Achtet bei euren Hosting-Anbietern also genau auf die Backup-Strategie! Wichtig sind Frequenz, Menge und Ausmaß. Hingegen nur die Datenbank zu sichern, reicht nicht aus.</p>
<h2>Entwicklungshilfe bei WordPress-Blogs</h2>
<p>Fragen zum Thema WordPress &amp; Hosting beantworten wir gerne und leisten auch tatkräftig Unterstützung. Nehmt dazu einfach <a href="http://www.entwicklungshilfe.nrw/kontakt/">Kontakt</a> mit uns auf.</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2015/12/16/wordpress-ohne-ftp-updaten/">Plugins: WordPress ohne FTP updaten</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://entwicklungshilfe.nrw/blog/2015/12/16/wordpress-ohne-ftp-updaten/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
