Atlassian bewirbt Git Essentials als integrierte Lösung für komplexe Software-Entwicklungsprojekte rund um Git. Die Lösungskette soll von der Idee bis zur Auslieferung alle notwendigen Schritte unterstützen. Von Konzeption über Planung und Programmierung bis hin zu kontinuierlich übersetzten und auslieferbaren Build-Artefakten werden alle Anforderungen abgedeckt. In dieser Artikelserie nehmen wir das Werkzeugpaket der Australier genauer unter die Lupe und vergleichen die vollmundigen Versprechen mit Tatsachen und praktischer Anwendbarkeit. Im ersten Teil betrachten wir den Grundaufbau von Git Essentials und die ersten Möglichkeiten, die Arbeiten an einem agilen Projekt zu unterstützen.

Von der Idee bis hin zur Auslieferung?

Atlassian bewirbt mit Git Essentials neben der nahtlosen Integration der einzelnen Komponenten miteinander vor allem die gesteigerte Effizienz durch Zusammenfassung, Anpassbarkeit von Workflows und Automatisierung manueller Aufgaben. Bei der Lösungskette handelt es sich um die Kombination von vier Werkzeugen aus dem Hause Atlassian rund um die agile Softwareentwicklung mit Git:

  • JIRA als erweiterbaren Issue Tracker zur Projektverwaltung,
  • JIRA Agile für Scrum und Kanban,
  • Stash als Git Repository Hosting-Werkzeug sowie
  • Bamboo als Continuous Integration-Server.

Git Essentials vereint also Vorgänge aus JIRA mit Sprints aus JIRA Agile sowie Branches und Pull-Requests aus Stash mit Jobs und Deployments aus Bamboo zu einem Entwicklungsmotor, welcher es ermöglichen soll, mit nur einem Werkzeugbündel die serverseitigen Anforderungen eines Softwareprojektes zu bedienen. Noch eine Entwicklungsumgebung wie Eclipse und andere clientseitige Software dazu und fertig – behauptet Atlassian. Das Mantra „Concept-To-Launch“ mit den Schritten Konzeptionierung, Planung, Bauen und Veröffentlichen lässt sich auf die Werkzeuge wie folgt abbilden:

concept-to-launch

Warum überhaupt Git Essentials?

Die Motivation zu den einzelnen Komponenten wie Continuous Integration-Server oder Issue Tracker muss nicht weiter erläutert werden, haben diese Art von Werkzeugen ihren Nutzen doch über die Jahre hinweg bereits unter Beweis gestellt. Git Essentials setzt viel mehr am Problem der Fragmentierung und einem Zuviel an zu verwaltenden Informationen an. Denn ein Projekt zu managen und dabei die Übersicht zu wahren, ist nicht einfach. Insbesondere Softwareprojekte neigen dazu, von den unterschiedlichen Beteiligten nur zu Bruchteilen wahrgenommen zu werden.

So sind Projektmanager und andere Projektbeteiligte in der Regel nicht daran interessiert, dass Entwickler Y im letzten Commit zwei neue Event Callbacks und eine neue Version einer Bibliothek eingebunden hat. Sie fordern vielmehr eine schnelle und stichhaltige Antwort auf Fragen wie

  • Wie ist der Stand der Entwicklung von Feature X?
  • In welchem Sprint wird Feature X ausgeliefert werden?
  • Wo läuft Feature X gerade?
  • Wurde Feature X schon geprüft und kann es live gesetzt werden, ich will das Feature heute noch…!

und möchten nach Möglichkeit nicht davon abhängig sein, die Informationen selbst zu beschaffen und z.B. von einem Entwickler eine vage Auskunft einzuholen. In der Geschäftswelt geht es vor allem um Effizienz und Konsolidierung von Daten, aber auch die Historisierung von Entwicklungsdaten spielt eine Rolle. So wünscht man sich, die Frage wann war Feature Y eigentlich das erste Mal live und wieso funktioniert es seit der letzten Veröffentlichung nicht mehr? ebenfalls beantworten zu können ohne Logs wälzen zu müssen.

Git Essentials bietet hier mit der Kombination aus JIRA und JIRA Agile eine Umgebung für Planung und Kontrolle von Projekten und um alle Stakeholder auf dem Laufenden zu halten. So können in JIRA und JIRA Agile Issues zu einem Backlog hinzugefügt, sowie priorisiert und geschätzt werden. Die Durchführung von Sprints und deren Reviews sind ebenfalls wie Informationen zur laufenden Entwicklung (z.B. Burn Down Charts) abgedeckt.

ge_fachlich

So müssen Projektmanagement und Stakeholder zumindest für diese Art von Informationen den Kontext nicht verlassen. Doch wie steht es um Entwickler und die weiteren notwendigen Informationen rund um den Entwicklungsfortschritt in einem Softwareprojekt?

Auch als Entwickler aus einem Kontext heraus arbeiten

Möchte ein Entwickler einen Vorgang bearbeiten, ist vor allem im Umfeld von Git einiges an manueller Arbeit nötig. Der Kern von Arbeitsabläufen in Git sind Zweige, und diese müssen erstellt werden. Arbeitet man an einem Projekt mit vielen Zweigen, sind Namenskonventionen für Zweigtypen üblich, und diese müssen mit den entsprechenden Vorgängen in Verbindung gebracht werden. So muss man in der Kommandozeile – oder dem GUI-Werkzeug des Vertrauens – einen passenden Branch mit aussagekräftigem Namen erstellen, diesen auschecken und dafür sorgen, dass der Zweig auch im zentralen Repository landet, und ihn dann noch mit einem JIRA-Vorgang z.B. via Smart Commits oder händisch verknüpfen.

Mit der Integration von Stash und JIRA ist es möglich, die Anzahl der Schritte vom Issue zum Branch erheblich zu reduzieren – auf einen Klick:

STASH28_create_branch_settings.png

Durch die Verschmelzung von Informationen wie Vorgangsname und -typ aus JIRA und Workflowmodell und dessen Namenskonventionen aus Stash, steht bereits eine Vielzahl an Daten vorab fest. In den meisten Fällen genügt also tatsächlich ein einzelner Klick. Aus technischer Sicht wird über AppLinks kommuniziert und mit Callbacks gearbeitet, wie nachfolgend dargestellt:

ge_branch

Diese Rückmeldungen über Applikationslinks können – wenn eingerichtet und korrekt konfiguriert – auch unter JIRA Aktionen in Form von Workflow Triggern auslösen.

Vorgänge in JIRA automatisieren mit Workflow Triggern

Der Zweig ist erstellt, die Entwicklung kann beginnen. Bekanntes Szenario: Der Branch wird ausgecheckt und die ersten Commits getätigt. Unter Umständen ist die Entwicklung eines kleinen Features sogar schon fertig und der Entwickler möchte stolz den Abschluss der Arbeit in Form eines „Done“-Status in JIRA kundtun. Dumm nur, dass der Vorgang die ganze Zeit im „Open“ Status war und niemand wusste, dass überhaupt daran gearbeitet wurde. Ein schneller Klick auf In Progress und direkt auf Done genügt, noch zwei Stunden Arbeitszeit buchen, fällt ja niemandem auf… Problematisch ist ein solches Vorgehen immer – Projektbeteiligte werden nicht oder nur verzögert über den Entwicklungsfortschritt informiert.

Abhilfe schafft das mit JIRA 6.3 eingeführte Workflow-Trigger-Prinzip. Diese Funktion nimmt Entwicklern die Verantwortung ab, einen JIRA-Vorgang in die passenden Zustände zu überführen. Ein JIRA-Trigger lauscht auf ein Ereignis innerhalb von JIRA oder in extern verknüpften Projekten weiterer Atlassian-Werkzeuge. Bei einem entsprechend konfigurierten Ereignis wird so eine Änderung des Zustands eines Vorgangs ausgelöst.

So kann beispielsweise ein Vorgang automatisch als In Progress markiert werden, sobald Stash einen Commit in einen passenden Zweig oder die Vorgangs-ID in einem Commit registriert.

jira-triggers-issue2.png

Dadurch werden Entwickler entlastet, denn die Verantwortung, JIRA Vorgänge stets im korrekten Zustand zu halten, entfällt. Für Entwickler sind keine Kontextwechsel mehr notwendig. Ein Commit genügt, um allen Beteiligten in Echtzeit aktualisierte Informationen über den Stand der Arbeit zu liefern. Einziger Wermutstropfen ist die bis dato etwas umständliche und ambivalente Konfiguration bei komplexen JIRA Workflows. Hier muss Atlassian noch etwas Feinschliff betreiben.

Im nächsten Teil…

.. befassen wir uns mit dem Thema Stash und Bamboo und wie diese Werkzeuge die Arbeit für Entwickler und den IT-Betrieb durch Automatisierung erleichtern können und liefern Antworten auf Fragen wie:

  • Kann man komplexe Git Workflows wie Gitflow oder gar eigene Arbeitsabläufe mit Git Essentials umsetzen?
  • Kann man ein Code Review vor Integration in den Hauptzweig zur Pflicht machen und welche Mechanismen bietet mir Git Essentials?
  • Kann man lästige manuelle Arbeit wie Merges einer Änderung in diverse Zweige automatisieren?
  • Wie kann Bamboo bei Merges, Builds und Deployments helfen?

Falls Ihr Interesse bereits geweckt sein sollte, finden Sie auf unseren Seiten zu Git Essentials weitere Informationen zur Solution und wie OIO Braintime Ihnen behilflich sein kann.