Cruise Control Kurulum ve Entegrasyon

Cruise Control sürekli kod deponuzu kontrol eden ve değişiklik gördüğü
projeleri depodan indirip derleyerek daima güncel, testleri yapılmış bir sürümün
oluşmasını sağlayan bir programdır. Derleme için NAnt, testler için NUnit,
kodlama standartları için FXCop, kodun ne kadarının ünite testine girdiğini test
etmek içinde NCover projelerini kullanır. Piyasada mevcut açık kaynak yada
ücretli pek çok Kod Kontrol sunucusu ile kullanılabilir.

Benim anlatacağım kısım Kruyz Kontrol ile Subversion kod deposunun nasıl
kontrol edileceğidir. Eğer Subversion nasıl kurulur merak ediyorsanız

Subversion
hakkındaki yazımı okumayı ihmal etmeyin. Öncelikle gerekli
uygulamaları kuralım.

  1. Subversion sürüm 1.1.3
  2. NAnt sürüm 0.85 rc2
  3. NAntContribute
    sürüm 0.85 rc2
  4. NUnit sürüm 2.2.0
  5. Visual Studio 2003 .NET
  6. Notepad2 (XML
    config dosyalarını yazmak için)
  7. TortiseSVN (komut satırı
    ile cebelleşmemek için)

NAntContrib zip dosyasını açtıktan sonra NAntContrib\bin dizinini NAnt\bin
dizini içine kopyalayın. Ayrıca NAnt\bin dizinini Environment Variables\Path
değişkenine eklemeyi unutmayın. Böylece nant.exe her yerden çağırılabilsin.

Kruyz Kontrol web kontrol modülü için IIS’e de ihtiyacınız olacak. Şart değil
ama log dosyalarını çok daha rahat okumanıza yarıyor. Merkezi olarak logların
herkes tarafından görülmesini sağlar.

.NET ortamı için framework 1.1 kullanılmıştır. NAnt build dosyası da 1.1 için
hazırlanmıştır dikkat ediniz. NAntContrib sürümü bazen uyumsuz olabiliyor.
NAntContrib komutları çalışmayabiliyor. NAnt ve NAntContrib için 0.85 RC2
sürümlerini indirirseniz beraberce mükemmel çalışıyorlar. Ayrıca NUnit içinde
2.2.0 sürümünü indirin, aksi takdirde "binding redirection" komutları ile
boğuşmak zorunda kalırsınız.

Benim kullandığım dizin yapısını aynen kullanın. Buradaki tüm dosyalar için
bu dizinleri kullanacağım. Benim tüm projelerim D sürücüsü altında, sizinki
farklı olabilir, gerekli değişikliği yapmayı unutmayın. Aşağıda benim
kullandığım dizin yapısını görüyorsunuz.

İlk iş olarak bir proje yaratalım. Aşağıdaki kodu Notepad2 içine kopyalarak
deneme.cs ismi ile WorkBench\CCDeneme dizinine
kaydedin. Dizin yapısı için benim kullandığımın aynısını kullanın ki karışıklık
olmasın. Daha sonra istediğiniz biçimde değiştirebilirsiniz.

using System;
namespace KruyzKontrol
{
    public class
Gurkan{
       
static void

Main(String[] args){
           
Console.Write("Gurkan Deneme");
        }
    }
}

Şimdi bir NAnt build dosyası hazırlayalım. Bu build dosyası ile kodumuzu
derleyeceğiz. Kruyz Kontrol derleme işini devralmadan evvel bu kısmın çalışıyor
olması gerekiyor. Aşağıdaki kodu gene Notepad2 içine kopyalayıp
cruise.build ismi ile Workbench\CCDeneme dizinine
kaydedin.

<?xml version="1.0"?>
<project name="CCDeneme" default="build" basedir=".">
    <description>herhangi bir aciklama</description>
    <property name="debug" value="true" />
    <property name="defaultframework" value="net-1.1" />
    <target name="build" description="Kodu Derler">
        <csc target="exe" output="Deneme.exe" debug="${debug}">
            <sources>
                <include name="Deneme.cs" />
            </sources>
        </csc>
    </target>
</project>

deneme.cs dosyasının olduğu dizine bir komut satırı açıp aşağıdaki komutu
girin. Böylece NAnt derleme yapıyor mu test etmiş olacağız.

D:\Workbench\CSharp\Deneme\>nant -t:net-1.1

Derleme işleminden sonra dos ekranında aşağıdaki gibi bir çıktı görmeniz
gerekir.

NAnt otomatik olarak dizin içinde .build uzantılı bir dosya arayacaktır.
Bulduğunda da içindeki bilgileri kullanarak kodu derlemeye çalışacaktır. -t
parametresi ile .NET Framework 1.1. sürümünü kullanmasını istediğimizi
belirtiyoruz. Eğer derleme başarılı olursa aynı dizinde bir exe ve bir de pdb
dosyası oluşması gerekir. Bunları kontrol ederek derleme işleminin
gerçekleştiğini teyit edin.

Eğer buraya kadar herşey başarılı oldu ise projedeki tüm dosyaları
Subversion’a göndermek için TortoiseSVN’i kullanın. Benim Subversion kurulu
sunucumun ismi YODA bu durumda TortoiseSVN ile svn protokolü kullanarak sunucuya
ulaşmak için svn://Yoda yazmam yada YODA’nın IP
adresini kullanmam gerekir. Örneğin svn://192.168.0.1
gibi. Proje için bir dizin oluşturmayı da ihmal etmeyin. Örneğin
svn://Yoda/CCDeneme/ gibi

Şimdi geliyoruz esas dananın kuyruğunun koptuğu yere. Kruyz Kontrol
sıkıştırılmış bir dosya halinde dağıtılıyor. Bu dosyayı yukarıda belirttiğim
gibi OpenSource\CruiseControl dizinine açın.

Kruyz Kontrol’ün çalışabilmesi için bir config dosyası gerekiyor. Aşağıdaki
kodu Notepad2 içine kopyalayarak ccnet.config ismi
ile OpenSource\CruiseControl\server dizini içine kaydedin. Bu dosya ccnet.exe
için bir konfigürasyon dosyasıdır ve neyi nerede bulacağını söyler.

<cruisecontrol>
<project>
    <name>CCDeneme</name>
    <webURL>http://Yoda/ccnet</webURL>
    <triggers>
            <intervalTrigger seconds="30" />
    </triggers>
    <sourcecontrol type="svn">
        <executable>svn.exe</executable>
        <trunkUrl>svn://Yoda/DotNet/CCDeneme</trunkUrl>
        <workingDirectory>D:\Workbench\CCDeneme</workingDirectory>
        <username>gurkan</username>
        <password>gurkanpass</password>
        <autoGetSource>true</autoGetSource>
    </sourcecontrol>
    <build type="nant">
        <executable>D:\OpenSource\NAnt\bin\nant.exe</executable>
        <baseDirectory>D:\Workbench\CCDeneme</baseDirectory>
<buildArgs>"-D:svn.executable=c:\program files\subversion\bin\svn.exe" 
  -defaultframework:net-1.1 </buildArgs>
        <buildFile>cruise.build</buildFile>
        <targetList>
            <target>build</target>
        </targetList>
        <buildTimeoutSeconds>300</buildTimeoutSeconds>
    </build>
    <publishers>
        <xmllogger>
            <logDir>D:\OpenSource\CruiseControl\web\log</logDir>
        </xmllogger>
    </publishers>
</project>
</cruisecontrol>

Buradaki önemli satırların açıklamalarını yapalım. projeleri
birbirinden ayıran isimdir ve herhangi bir isim verilebilir. derleme
işleminin örütbağ üzerinden takip edilmesi için kullanılacak adresi belirtir ve
cctray uygulaması ile derlemeyi takip ettiğinizde işinize yarayacaktır.
kaç saniyede bir deponun kontrol edilmesi gerektiğini belirtir.
kısmında projenin Subversion deposunda nerede olduğunu
belirtiyoruz. projenin lokal çalışma dizinini belirtiyor.
ise Kruyz Kontrol’a eğer kodda değişiklik varsa Subversion
deposundan indirmesi gerektiğini söylüyor. Aslında kodu indirme işini
NAntContrib ile de yapabiliriz. kısmında esas derleme işlemini
gerçekleştirecek olan cruise.build dosyasının yeri ve yer alıyor. Bir
NAnt .build dosyası birden fazla içerebilir. Daha ayrıntılı bilgi için
NAnt belgelerini inceleyin. kısmında proje derlendikten sonra oluşan
log dosyalarının nereye yazılacağını belirtiyoruz.

CruiseControl\web dizini içine "log" isminde bir dizin yaratın.
CruiseControl\Web altında web.config dosyasını Notepad2 ile açarak aşağıdaki
satırı bulun:

add key="logDir"
value="log"
/>

Ve bu satır ile değiştirin:

<add key="logDir"
value="D:\OpenSource\CruiseControl\web\log\"
/>

Kruyz Kontrol dizini altındaki web dizinini IIS içinde virtual directory
(sanal dizin) olarak kayıt edin. İsim olarak "ccnet" verin.

Artık ccnet.exe programını çalıştırabiliriz. Komut satırına geçip
CruiseControl\server dizinine geçin ve ccnet.exe programını çalıştırın. ccnet,
config dosyasını kullanarak Subversion içindeki projeyi kontrol eder, eğer
değişiklik varsa indirip derleme işlemini başlatır. Derleme bitince komut
satırında bir mesaj göreceksiniz. ccnet çalışmaya devam edecektir ve DOS komut
satırına dönmeyecektir. Her 30 saniyede bir Subversion üzerindeki projeyi
kontrol ederek değişiklik var mı bakacaktır. Her yapılan işinde bir kaydını
tutacaktır. Log kayıtlarını görmek için IIS kullanacağız.

Şimdi
http://localhost/ccnet
adresine gidin. Eğer aynı isimleri
kullandıysanız adres üstüne sağ tıklayıp "Open in New Window" diyebilirsiniz. Bu
adresde aşağıdaki sayfayı görmeniz gerekir.

Eğer benim gibi bir kaç makineden oluşan bir ağınız varsa diğer bir
bilgisayarda cctray uygulamasını kurup CruiseControl sunucusu üzerinde ki
derleme işlemlerini takip edebilirsiniz. CruiseControl\cctray dizinini olduğu
gibi diğer bilgisayara kopyalayın ve cctray.exe programını çalıştırın. Bu arada
CruiseControl sunucusunda ccnet.exe’de çalışıyor olmalı. Böylece her derleme
olduğunda bir mesaj ile uyarılacaksınız. Cctray uygulamasını eğer başka bir
bilgisayarda çalıştırıyorsanız ayarlarını şu şekilde yapın. YODA yerine sizin
ccnet.exe programını çalıştırdığınız bilgisayarın ismi yada IP adresi gelecek.

Server : tcp://YODA:21234/CruiseManager.rem

Project Name: CCDeneme

Buraya kadar başardığımız işleri bir sıralayalım.

  1. ccnet.config dosyasını düzenleyerek Subversion ile Kruyz Kontrol
    arasındaki bağlantıyı kurduk.
  2. ccnet.exe uygulamasını çalıştırarak Subversion kod deposunun kontrol
    edilmesini sağladık.
  3. Depoda bir değişiklik olduğunda KruyzKontrol kodu indirerek NAnt ile
    derledi.
  4. Derleme işlemini web üzerinden takip edebiliyoruz.
  5. cctray.exe uygulaması ile derleme işlemi hakkında haberdar olabiliyoruz.

NUnit Testlerini ekleyelim

Şimdi projemize bir de NUnit testi ekleyeceğiz ve NAnt ile derlerken
testlerinde yapılmasını sağlayacağız. Bu işlemi hallettikten sonrada Kruyz
Kontrol ile entegre ederek çıktıları görmeye çalışacağız. Bir süreliğine
ccnet.exe uygulamasını kapatın. Öncelikle NAnt ve NUnit’i beraber çalışıyor hale
getirmemiz lazım. Daha sonra tüm yaptığımızı Kruyz Kontrol ile görmeye
çalışacağız.

Bu sefer Visual Studio ile bir Class Library projesi oluşturun. Namespace
olarak KruyzKontrol verin. Projede class1.cs dosyasını aşağıdaki gibi
değiştirin. Böyle yapmamızın sebebi NUnit assembly kütüphanelerinin Notepad
kullanılarak yazılan C# kodlarından çağırılamaması. Visual Studio ile derleme
yaparken .csproj dosyasındaki HintPath dizinlerini kullanarak NUnit assembly
kütüphanelerine erişiyor.

using System;
using NUnit.Framework;
namespace KruyzKontrol
{
 

    /// <summary>
    /// Summary
description for Class1.

    /// </summary>
    [TestFixture]
    public class
Class1
    {
       
public
Class1()
        {
           
//
           
// TODO: Add constructor logic here
           
//

        }
 

       [Test]
       
public void

BuTestHataVerecek()
        {
           
Assert.Fail("Bu test hatalidir ve Kruyz Kontrol da cikacak");
        }

    }
}

Bu projeyi Workbench\CCDeneme altına Test isminde bir dizin açarak
CCDenemeTest ismi ile kaydedin. Daha sonra TortoiseSVN kullanarak CCDeneme
altına gene Test isminde bir dizin açarak Subversion’a gönderin. Repo-Browser
ile baktığınızda Subversion içinde aşağıdaki yapıyı görmeniz gerekir.

Şimdi cruise.build dosyası üzerinde bazı değişiklikler yapacağız. Öncelikle
NUnit testleri ile ilgili kısmı Subversion’dan indireceğiz. Böylece NAnt nasıl
Subversion ile çalışıyor görmüş olacağız. İndirirken biraz temizlik yapacağız ve
en sonunda da build kısmında NUnit testlerini çalıştırarak çıktıları Kruyz
Kontrol ile görmek için XML olarak alacağız. Aşağıda cruise.build dosyasının
yeni halini görüyorsunuz.

<?xml version="1.0"?>
<project name="CCDeneme" default="build" basedir=".">
<record name="Buildlog.txt" level="Info" action="Start"/>
<description>herhangi bir aciklama</description>
<property name="debug" value="true" />
<property name="defaultframework" value="net-1.1" />
<target name="build" depends="get">
<csc target="exe" output="Deneme.exe" debug="${debug}">
<sources>
<include name="Deneme.cs" />
</sources>
</csc>
<solution configuration="debug" solutionfile="Test\CCDenemeTest.sln" />
<nunit2>
<formatter type="Xml" />
<test assemblyname="Test\bin\debug\CCDenemeTest.dll" />
</nunit2>
</target>
<target name="get" depends="clean">
<svn command="checkout"
uri="svn://Yoda/DotNet/CCDeneme/Test"
destination="D:\Workbench\CCDeneme"
username="gurkan"
password="gurkanpass"
verbose="true"/>
</target>
<target name="clean" >
<delete dir="Test" failonerror="false" />
<mkdir dir="Test" />
<delete file="Deneme.exe" failonerror="false" />
<delete file="Deneme.pdb" failonerror="false" />
</target>
<record name="Buildlog.txt" action="Close"/>
</project>

Bir kaç hedeften (target) oluşan bu build dosyası önce gerekli dizinleri
silecek, test projesini indirecek, CCDeneme ve CCDenemeTest projelerini
derleyecek ve son olarak ta testleri yapacaktır. Komut satırına geçip NAnt ile
derlemeye çalışın. aşağıdaki gibi bir mesaj alıyor musunuz?

D:\Workbench\CSharp\Deneme\>nant -t:net-1.1

 

Eğer yukarıdaki gibi hata mesajlarını alıyorsanız istediğimiz oldu demektir.
Artık burada görülen hatayı Kruyz Kontrol ile web üzerinden görebiliriz. Önce
ccnet.exe uygulamasını çalıştırın ardından

http://localhost/ccnet/default.aspx
adresine gidin. Aşağıdaki gibi
hata mesajlarını görmeniz gerekir.

 

Bu yazıyı burada noktalıyorum. Vaktim olursa çoklu projeleri de bir ara
anlatacağım.

Herkese kolay gelsin, yararlı oldu ise ne ala

Posted in Bilişim, Türkçe.