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.

