Obecnie standardem stało się już używanie jakiegoś systemu kontroli wersji oraz środowiska CI w projektach informatycznych. Choć narzędzia te są coraz lepsze, to cały czas jeszcze jest sporo miejsca na poprawę. W obecnym projekcie używam następującej kombinacji narzędzi: JIRA + SVN + Jenkins.

W ramach projektu mamy podział na następujące kategorie zadań:

[list]

  • story zdefiniowane przez product ownera / zespół,
  • zgłoszony błąd,
  • inne.

[/list]

Na pierwsze dwa zadania są oczywiście stworzone odpowiednie wpisy w odpowiednich narzędziach. W tym projekcie zarówno do zarządzania błędami, jak również wymaganiami używamy JIRY. Nie zmienia to jednak faktu, że chcemy mieć możliwość rozróżniania tych elementów w SVN. Aby to zapewnić postanowiliśmy wprowadzić następujące oznaczenia w SVN przy commit-cie:

[list]

  • [STORY-XXX],
  • [BUG-XXX],
  • [OTHER].

[/list]

XXX- numer z JIRY.

Teraz wystarczy tylko zapewniać, aby programiści nie zapominali o tym przy wrzucaniu rzeczy do SVN. Co nie zawsze jest takie łatwe, ale od czego są narzędzia.

Zaczynamy od przygotowania prostego skryptu, który będzie weryfikował wprowadzony opis:

$commitMessageFile = Get-Content $args[2];

if (($commitMessageFile -eq $null) -or $commitMessageFile.length -eq 0)
{
  Write-Error "Commit message cannot be empty";
  exit 9;
}

$commitMessage = ($commitMessageFile)[0];

if (($commitMessage.length -eq 0) -or $commitMessage -eq $NULL)
{
  Write-Error "First line of commit message cannot be empty";
  exit 9;
}

$regexPattern = "^\[(((STORY|BUG|)-[0-9]*)|OTHER)\]\W.*"

if (!($commitMessageFile -match $regexPattern))
{
  Write-Error "Commit message does not have correct format.";
  exit 9;
}

Zapisujemy ten skrypt w jakimś miejscu na dysku i poprawiamy konfigurację SVNa. W tym celu otwieramy konfigurację SVNa i wchodzimy do Hook Scripts:

TortoiseSVN - Hook Scripts

Następie dodajemy nowy Hook, który będzie uruchamiał nasz skrypt przed Commitem:

TortoiseSVN - Add Hook Scripts

I to wszystko. W momencie, gdy ktoś spróbuje wrzucić jakiś kod do SVNa i nie zastosuje odpowiedniego formatu zobaczy następujący komunikat:

TortoiseSVN - Commit Fail

Ponieważ skrypt do weryfikacji opisu używa wyrażeń regularnych to tak na prawdę możliwości konfiguracji i dostosowania tego rozwiązania do własnych potrzeb są olbrzymie.