Smart Commits mit JIRA und FishEye + Crucible

Die Erweiterbarkeit von Atlassians Projektmanagement-Plattform JIRA und deren Vielfalt an verfügbaren Plugins bieten eine Fülle von Möglichkeiten, den Entwickleralltag zu erleichtern.

Als Beispiel sei das JIRA-Subversion-Plugin genannt, womit sich Source Code-Repositores in JIRA einbinden und Änderungen am Quelltext mit den zugehörigen Vorgängen verknüpfen lassen.

Innerhalb von Commit Messages können Entwickler dann die Vorgangskennung angeben, um die Verknüpfung durchzuführen:

JIRAPROJ-21 Fixed bugs

Es lassen sich auch mehrere Vorgänge mit einem Commit referenzieren:

JIRAPROJ-21 JIRAPROJ-22 JIRAPROJ-24 Fixed several bugs

Jenseits dieser häufig genutzten Vorgangsverknüpfung lässt sich mit Commit Messages im Atlassian Stack jedoch noch weit mehr bewerkstelligen, indem man auf sogenannte Smart Commits zurückgreift.

Smart Commits & JIRA Workflows

Smart Commits ermöglichen es Entwicklern, Befehle für JIRA und andere Atlassian Tools in die Commit-Message ihrer Quelltextänderung einzufügen. Diese werden interpretiert und entsprechend ausgeführt. Um Smart Commits zu verwenden, benötigt man z.B. das JIRA DVCS Connector Plugin für Bitbucket und GitHub.

Mit Smart Commits lassen sich wie folgt Aktionen auf JIRA-Vorgänge anhängen:

ISSUE-KEY #command 

Wenn beispielsweise die Zeiterfassung in JIRA aktiviert wurde, lässt sich mittels des #time Kommandos die Zeit, welche an einem Vorgang gearbeitet wurde in der Commit Message direkt mitbuchen sowie ein Kommentar für den Worklog angeben.

JIRAPROJ-21 #time 1w 1d 3h 15m Fixed some bugs

Dieser Befehl bucht die entsprechende Zeit mit dem angegebenen Kommentar auf den Vorgang JIRAPROJ-21.

JIRAPROJ-21 #comment Fixed some bugs

Dieser Befehl fügt einen Kommentar in den Vorgang ein.

Zudem lassen sich die dem jeweiligen Vorgang zugehörigen JIRA-Workflow-Transitions in einer Commit Message verwenden. Zum Beispiel lassen sich die Im Standard-Workflow vorhandenen Übergange mit #start-progress, #stop-progress,  #resolve, #close und #reopen ansteuern.

Damit lässt der Lebenszyklus eines Vorgangs mithilfe von Commit Messages steuern und selbstverständlich mit den anderen Befehlen kombinieren.

JIRAPROJ-21 #time 1h Fixed some issues #stop-progress
 JIRAPROJ-21 #time 2h Fixed more issues #comment Should work again
 JIRAPROJ-21 #time 1h Fixed all issues #resolve

Ebenso ist es möglich, mehrere Vorgänge in einer Commit-Message anzusteuern:

JIRAPROJ-24 JIRAPROJ-21 #resolve #comment Fixed both issues
in the backend by adding an abstraction layer

FishEye & Smart Commits hinter der Firewall

Frei verfügbar bietet Atlassian Smart Commits  derzeit lediglich mit dem JIRA-DVCS-Plugin und somit lediglich für Quelltext, welcher auf GitHub oder Bitbucket gehostet wird. Möchte man in Repositories innerhalb von Unternehmensgrenzen auf Smart Commits zurückgreifen, ist man auf Atlassian FishEye angewiesen.

FishEye ist eine „Source  Code Management“-Plattform, welche alle gängigen Versionsverwaltungstechnologien anbinden kann, darunter Subversion, Git, Mercurial und Perforce. FishEye stellt Funktionen wie Suche innerhalb von Repositories sowie Side-by-Side Diffs für Änderungen am Quelltext zur Verfügung.

Setzt man FishEye zur Anbindung von Quelltext in JIRA ein, bietet dieses für alle unterstützten Versionsverwaltungssysteme die Möglichkeit, Smart Commits zu verwenden. Mit der Smart Commit-API lässt sich FishEye um weitere Befehle erweitern.

Smart Commits & Crucible Code Reviews

Das Crucible-Plugin für FishEye ermöglicht es, Code Reviews für Änderungen am Quelltext durchzuführen und beinhaltet entsprechende Smart Commit-Befehle, um Code Reviews anzustoßen bzw. zu aktualisieren.

Die Syntax unterscheidet sich ein wenig von den Befehlen für den JIRA-Workflow:

Review for backend controller bugfixes
+review

Dieser Befehl legt ein Review mit dem Titel „Review for backend controller bugfixes“  als Draft auf den aktuellen Commit in Crucible an.

Möchte man ein Review direkt starten und mit JIRA-Vorgängen verknüpfen, kann man Reviewer und ein bestimmtes Crucible-Projekt als Parameter benennen sowie die verwandte JIRA-Vorgangsnummer im Review-Titel angeben.

JIRAPROJ-21 Review for backend controller bugfixes
+review CR-PROJ @amueller @mschmidt

JIRAPROJ-21 #time 1h #resolve
#comment Fixed issues related to the backend controller

Dieser Befehl startet ein neues Review auf den Commit im Crucible-Projekt CR-PROJ und lädt amueller und mschmidt zu diesem Review ein und verknüpft es mit dem Vorgang JIRAPROJ-21. Innerhalb der Commit Message lassen sich im Anschluss auch JIRA-Smart Commits verwenden

Sind Korrekturen am Quelltext nötig, kann die eindeutige Identifkationsnummer des Crucible-Reviews (Review-Key) in der Commit-Nachricht angegeben werden, um die Verbesserungen dem Review hinzuzufügen:

JIRAPROJ-21 Reworked some aspects of the bug fix
+review CR-PROJ-123

JIRAPROJ-21 #time 20m timelog entry for review
#comment Reworked the code for this issue a bit

Hiermit wird das Review CR-PROJ-123 aktualisiert und die Inhalte des entsprechenden Commits hinzugefügt. Auch hier lassen sich die Korrektur-Commits  den entsprechenden JIRA-Vorgängen zuordnen, indem man die Vorgangsnummer angibt.

Abschließende Anmerkungen & Fazit

Bei allem Komfort beabsichtigen Smart Commits keineswegs die Weboberflächen der Werkzeuge zu ersetzen. Beispielweise ist direkter Feldzugriff auf Vorgänge in JIRA nicht möglich. Zudem lassen sich Crucible Code Reviews nur auf das jeweilige Commit starten, jedoch nicht auf die vorigen Commits, die zum selben Vorgang in JIRA gehören. Für diese Aktionen ist man als Entwickler immer noch auf den Browser angewiesen.

Eine Anmerkung zur Sicherheit: Möchte man FishEye-basierte Smart Commits in öffentlich zugänglichen Projekten verwenden, entsteht bei verteilter  Versionsverwaltung ein potenzielles Sicherheitsrisiko durch Privilege Escalation, da Commits mit beliebigen Benutzernamen durchgeführt werden können. Atlassian empfiehlt aus diesem Grund Smart Commits nur dann zu verwenden, wenn allen Entwicklern mit Schreibrechten auf das Repository voll vertraut werden kann. Dies sollte bei Repositories beim Einsatz innerhalb von Unternehmensgrenzen üblicherweise kein Problem darstellen.

Abschließend lässt sich sagen, dass Smart Commits  den Entwickleralltag durchaus erleichtern können, indem gängige JIRA-Aktionen im Workflow bequem über Commit Messages gesteuert werden. Setzt man FishEye und Crucible ein, lassen sich zudem Code Reviews verwalten. Smart Commits sind jedoch nicht als Ersatz für die webbasierten Benutzeroberflächen gedacht, sondern lediglich eine Ergänzung, um die Anzahl der nötigen Kontextwechsel von Entwicklerwerkzeug in den Browser zu reduzieren.

Short URL for this post: http://wp.me/p4nxik-1D5
This entry was posted in Atlassian Tools and tagged , , , , , . Bookmark the permalink.

Leave a Reply