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

Reklamlar


Bu girdiye atılan yorumlar:

# re: Cruise Control Kurulum ve Entegrasyon

Merhaba
Cruise Control Kurulum ve Entegrasyon gercekten guzel bir makale olmus elinize saglık.

Subversion sistemime kurdum,cruse controlude kurdum. ama daha crusecontrol asamasına gelemedim onun ne ise yaradıgını kavramaya calisiyorum :) .subversion'i apache ile birlikte entegre ettim.TortiseSVN ile de projemi version kontrolu icine aldım fakat projemdeki degisiklikler .svn dosyasında barındırılıyor.tum kod dosyaları ana serverda tutulabilir mi?Yedeklemede almıs olurduk.Projeyi yazan ve subversion kullanan ekibin tum kodlarıda ortak paylasımıda saglanmıs olurdu.
Bu dusundugumu ortak proje kodlarını ana serverde tutup degiseni senkronize etmek mumkun mu subversion ile? Bildiginiz bu isi yapan bir urun varmı?
Tesekkurler

Ahmet Korkmaz tarafından  2/24/2007 1:52 PM tarihinde atılmıştır.
# re: Cruise Control Kurulum ve Entegrasyon

Dogru yoldasin Ahmet.
TSVN ile projeni surum kontrolune aldiysan kodlari sunucuya gondermissin demektir. Import secenegi ile projeyi kontrol altina aldiktan sonra Commit ile kodu sunucuya gonderebilirsin boylece diger yazilim uzmanlari da ayni kod uzerinde calisabilir.

Degisiklik yaptigin kod dosyasini ikonu degisir ve her degisikligi Commit etmen gerekir ki degisiklikler sunucuya gonderilsin. Boylece senkronize olmus olur.

Cruise Control ise kod deposunu surekli kontrol eder ve degisiklik oldugunda (sen Commit ettiginde) degisiklikleri indirir ve projeyi derler ve bunlarida bir rapor halinde sunar. Boylece yaptigin degisiklik derlemeyi bozuyor mu gorebilirsin.

Gurkan Yeniceri tarafından  2/24/2007 4:11 PM tarihinde atılmıştır.
# Versiyon Kontrol Sistemleri : TFS &amp;#8211; SVN kar????la??t??rmas?? &amp;laquo; Base Teknoloji

Versiyon Kontrol Sistemleri : TFS &amp;#8211; SVN kar????la??t??rmas?? &amp;laquo; Base Teknoloji

Pingback/TrackBack tarafından  7/27/2009 3:02 PM tarihinde atılmıştır.

Yorumunuzu buradan giriniz

Yorumlar onaylandıktan sonra yayınlanacaktır

*


*


 (Görüntülenmeyecek)


 (İsminizde link olarak görüntülenecek)


*
Bold Italic Underline Blockquote Hyperlink Hyperlink

 

Please add 4 and 2 and type the answer here:

Yorum Önizleme:

 

Arama



Hakkımda

Merhaba, ben Gürkan Yeniçeri. 10 yılı aşkın süredir özel sektör ve hükümet iştiraklerinde yazılım mühendisliği yapıyorum. Bu sitede 2005 Mart ayından beri genelde yazılım mühendisliği ve Microsoft teknolojileri hakkında yazmaktayım. Profesyonel iş geçmişim hakkında daha fazla bilgiyi aşağıdaki Linkedin.com linkinden alabilirsiniz.
Gürkan Yeniçeri'nin profilini görmek için tıklayın
Faturaları ödeyen günlük işim dışında Açık Kaynak Subtext Projesine katkıda bulunuyorum. Bu blogun alt yapısıda Subtext ile hazırlanmıştır. Ayrıca 1999 yılından beri Programlama.com sitesinde VB6 editörlüğü yapıyorum. Fakat takdir edersinizki VB6 artık ölü bir dil, bu nedenle beta sürümlerinden beri C# ve ASP.NET programcılığı ile uğraşıyorum.

Kontak

Soru sormak veya öneride bulunmak isterseniz buradaki kontak formunu kullanın. Mesajlarınıza en kısa zaman içinde cevap vermeye çalışacağım. Ayrıca Windows Live Messenger kullanarak gyeniceri {AT} hotmail {DOT} com adresinden bana ulaşabilirsiniz.

Eğer İngilizce blogumu okumak isterseniz buraya buyrun.
Blogumu RSS Bandit gibi bir RSS okuyucusu ile de takip etmek için kullanın.
Ayrıca aşağıdaki linklerden hakkımda ayrıtılı bilgi alabilirsiniz.
Twiter
Friendfeed
Facebook

RSS 2.0

Reklamlar


Vezir

Vezir Proje Danışmanı
Sitede birde Vezir isminde wikimiz var. Bu wikiyi yazmayı düşündüğüm bir kitap için oluşturmuştum daha sonra herkese açmaya karar verdim. Vezir yazılım firması kurmak isteyenlere tavsiyeler vermek için hazırlandı. Ayrıca UML ve Modül Tabanlı Geliştirme hakkında da bilgiler mevcut. Vakit buldukça yeni eklemeler yapıyorum. Değişikliklerden haberdar olmak için RSS çıktısına üye olabilirsiniz.

Tag Bulutu

Tüm taglar...
www.flickr.com
This is a Flickr badge showing public photos from gurkanyeniceri. Make your own badge here.
Bu blogda 261 yazı ve 442 yorum var. Diğer sitelerden 22 adet link gelmiş.

Buradayım

my blogmap

Reklamlar