3 Şubat 2013 Pazar

JIRA commit acceptance plugini hakkında

Merhabalar,

Bu yazımda az önce bir svn  projemizde devreye aldığım Jira Commit Acceptance plugini hakkında özet bilgi vermek istiyorum.

Jira Commit acceptance eklentisinin en temel görevi bir commit yapıldığında bu commit işleminin belirli kriterlere uyup uymadığını kontrol etmek. Bizim örneğimizde ise commit logunda jira issue numarası olmayan commitleri reddetmek.
Plugin ile ilgili yapılandırma ekranı aşağıdaki gibidir.




Buradaki en önemli parametre "The log message must contain a valid JIRA issue key(s)" Yani svn commit logunda yazılımcı mutlaka o ilgili JIRA projesinde bu iş ile ilgili bir ticket numarası girmeli.
Eğer commit logunda böyle bir key (Örnek: SURGATE-854) yoksa commit kabul edilmemektedir.


İlgili pluginin aktif edilmesi için hem JIRA hem de SVN'de ayar yapılması gerekiyor. Burada RPM tabanlı Linux dağıtımına kurulu bir JIRA ve SVN için yapılandırma anlatılacaktır.

1. JIRA'daki işlemler

JIRA'ya bu pluginin yüklenmesi gerekiyor. plugin version 1 plugin türü olduğu için jira arayüzünden yüklenemektedir. Yüklemek için
  • commitacceptance-1.6.0.jar dosyasını jira'nın kurulu olduğu sunucuya atın.(Dosyayı /root/commitacceptance-1.6.0.jar olara attığınızı kabul ediyorum)
  • Jirayı durdurun.
    # /etc/init.d/jira stop
  • Root kullanıcısı olarak plugini jira lib dizinine kopyalayın
    # cp /root/commitacceptance-1.6.0.jar /opt/atlassian/jira/atlassian-jira/WEB-INF/lib/
  • Jirayı başlatın
    # /etc/init.d/jira start
  • Jira arayüzüne admin yetkisine sahip bir kullanıcı olarak girin. Administration->Plugins sayfasında "Commit acceptance" plugin'i görebilirsiniz.

Commit Acceptance bağlantısını takip ederek Global veya Proje bazlı ayar yapabilirsiniz.




2. SVN'deki işlemler

SVN'deki her bir projenin altındaki hooks dizininde pre-commit scriptleri oluşturularak projenin JIRA ile entegrasyonu sağlanmaktadır. Bunu sağlamak için perl ve python da yazılmış iki script gelmektedir. Burada  perl üzerinden bir anlatım yapacağım.
Öncesinde SVN hooks hakkında biraz bilgi verelim. Her bir svn projesinde hooks diye bir dizin bulunur. Bu dizinde aşağıdaki gibi dosyalar bulunur.

# ls /data/svn/surgateconf/hooks/
post-commit       post-lock.tmpl            post-unlock.tmpl  pre-commit.tmpl  pre-revprop-change.tmpl  start-commit.tmpl
post-commit.tmpl  post-revprop-change.tmpl  pre-commit        pre-lock.tmpl    pre-unlock.tmpl


Buradaki dosyalar sayesinde commit öncesi ve sonrasında aksiyonlar alınabilmektedir. Commit acceptance plugini pre-commit dosyasını kullanarak commit svn'de tamamlanmadan devreye girerek kontrollerini yapmaktadır.
  •  Commit acceptance sayfasından commitacceptance-1.4.1-client-scripts.zip dosyasını Linux makinaya indirin. # wget https://maven.atlassian.com/contrib/com/atlassian/jira/ext/commitacceptance/1.4.1/commitacceptance-1.4.1-client-scripts.zip
  • Zip'i açın
    # unzip commitacceptance-1.4.1-client-scripts.zip
  • SVN scriptlerinin olduğu dizine gidin.
    #cd commitacceptance-1.4.1/perl/svn/
    # ls
    jira-client.pl  pre-commit.bat  pre-commit.sh

     
  • jira-client.pl dosyası ve pre-commit.sh dosyası istenilen svn projesinin hooks dizinine kopyalanmalı. Yanlız pre-commit.sh değil pre-commit  olarak kopyalanmalı. Her iki dosya izinleride 755 olmalı. 
  • pre-commit dosyasının içeriği aşağıdaki gibidir. Buradaki script yolu dizin proje dizinine göre düzenlenmeli
    # cat pre-commit.sh
    #!/bin/sh
    /usr/bin/perl /Users/nolen/svnrepo/hooks/jira-client.pl $1 $2
  • perl paketinin çalışması için perl SOAP Lite paketi kurulmalı.
    # yum install perl-SOAP-Lite
  • jira-client.pl dosyasında bulunan aşağıdaki 4 değer mutlaka sizin projenizi ve jira bilgilerinize göre değiştirilmeli
    my $jiraBaseURL = "<JIRA base URL>";
    my $jiraLogin = "<JIRA user name>";
    my $jiraPassword = "<JIRA password>";
    my $projectKey = "<JIRA project key>";


    Yukarıdaki SVN işlemlerini commit acceptance yapmak istediğiniz her bir projeye ayrı ayrı uygulamasınız. Bu da demektir ki her bir proje için ayrı bir jira-client.pl dosyası ve bu dosyanın yolunu belirten post-commit dosyasını düzenlemeniz gerekiyor.

    Bu işlemlerden sonra commit yaparken ISSUE numarası girmeyen kullanıcılar aşağıdaki gibi bir hata alacaktır.

    $ svn ci
    issue girmedik.
    --This line, and those below, will be ignored--

    M    deneme.sh



    Dosyayı kaydedip çıktığımızda aşağıdaki hatayı alacağız.
    svn-commit.3.tmp: 4 lines, 79 characters.
    Sending        deneme.sh
    Transmitting file data .svn: Commit failed (details follow):
    svn: Commit blocked by pre-commit hook (exit code 1) with output:
    Committer: ismail.yenigul
    Commit message: "issue girmedik"
    Commit rejected: No project accepts this commit. Project [SURGATE]: Commit message must contain at least one valid issue key.

    svn: Your commit message was left in a temporary file:
    svn:    '/usr/home/ismail/projects/surgateconf40/svn-commit.3.tmp'
Fakat commit loguna  SURGATE-854 gibi bir JIRA issue numarası eklediğimizde commit işlemimiz başarı ile tamamlanacaktır.

Hiç yorum yok:

Yorum Gönder