Continuous Integration (CI) VE Continuous delivery (CD) – Bir Sistemcinin Yazilim Dunyasiyla Imtahani – Episode 1

Dunya donuyor, zaman akiyor ve “Cloud” sekilenmeye, bizleride yaninda degistirmeye devam ediyor. Hem Steve Ballmer hem market hemde “Cloud” bizi Amerikan firmalarina ozgu olan satisi cevrelemis diger halklarin merkezine simdide “Yazilimci” lari koyuyor, belki bir sure sonra o halkanin icinde onlarda olmayacak “Machine Learning” olayin icine edecek ama daha ona var belki bilinmez bekleyip gorecegiz ama su anda bildigimiz tek sey var ki artik “yazilimci” lar “sistemci” lerle BERABER/ENTEGRE/BAGLI olmak zorunda. Haliyle biz sistemcilerde onlarin dunyasini daha iyi anlamamiz ve daha yeni seyler ogrenmemiz gerekiyor ; Containers , DevOps , PAAS , API  ,  CI/CD ,  Monolithic Uygulamalar , Cloud Native Apps , Cloud Foundry , Kubernetis , Python , Ruby , Django , JSON liste boyle gidiyor

Madem anlamaya calisacagiz sirasi mi degil mi bilmiyorum ama ben kendime once CI (Continuous Integration )/CD (Continuous Delivery) sectim , zaten olay papatya fali gibi , birde yanina ogrendigim “uygulama” ve “terim” leri yazmaya basladim demeyin keyfime, belli olmaz belki cloud bizi yazilimci yapar ama hala yazilim ile iliski durumum karisik🙂

CI/CD diyince onume ne yalan soyliyim “Jenkins” geldi , sonra bu CI/CD ne oldugunu , ne icin kullanildigini , bir suru ek bilesen ile zengilestirildigini gordum, bu arada ayni seyleri yapan birbirinden cokta farkli olmayan benzer yazilimlardanda bir suru oldugunu gordum.

Empoze edilmek istenen sey , artik tek buyuk yiginlar halinda kod lama yapmayalim , bunlari parcalara ayiralim , hatta Docker cilar var oyle ki laptop umda MAC imde yazdigim kod production da Docker sayesinde aynen calissin veya ben sadece kodumu yollayayim o derlesin IAAS yapilandirsin , kod parcalarini farkli guruplar gelistirsin , bir guncelleme tum programin genel calismasini etkilemesin , commit sayisi artsin, gunde birden fazla build ureteyim ki uygulamam hem musterimin isteklerine karsilik verebileyim hemde bug lari daha hizli duzeltebileyim, risk  azaltilabilinsin,  hem icerden hemde disardan katki verilebilsin , herkes tum process i gorsun ve sorumlu olsun, kod uzerinde konusalim/tartisalim, hatali kodlari tek bir noktadan izleyip kayda alalim, elle yapilan islerim var ise onlari otomatik hale getirelim , elle yapacagimiz veya test muhendisleri ile yapilacak checklist leri otomatiklestirelim ve daha kaliteli bir surum olsun. Iste bunlarin tamaminin bir araya gelerek olusturdugu calisma yonetimine CI/CD diyoruz🙂 Bir paragrafta acikaldim sanirim , simdi bunu yazilimcilarin daha iyi bildigi biz sistemcilerin ogrenmesi gereken bir dizi uygulama ve bilesenle ornekleyelim.

Dedigim gibi CI olayinda gordugum, en cok ismi gecen sey Jenkins/Hudson . Open source , deli gibi bilesen destegi var , distributed build destegi var (yani bir master/slave ilisisi icerinde build isteklerini dagitabiliyor) , community iyi diyorlar. Jenkins e alternatif kimler var , gordugum kadariyla JetBrains in “TeamCity” si , Atlassian in “Bamboo” , CruiseControl , Snap-ci ve Travis CI gibi open source/Hosted/Ticari yazilimlar mevcut.

Iki ustteki paragrafi anlatan bir resim olsa , asagidakinden daha iyi olmazdi herhalde ; Jenkis tam gobekte🙂

Screen Shot 2015-11-17 at 00.03.08

SCM (Software Configuration Managment) aslinda bir mekanizma, yazilimin hayati boyunca gecirdigi tum degisiklikleri izlemek ve kontrol etmek icin kullanilan bir teknik.

Diyelim ;

  • Bir veya daha fazla yazilimcimiz var , bunlar kendi IDE lerini kullarak (Eclipse , Virtual Studio , PyCharm) uygulama gelistiriyorlar.
  • Kod larinda yaptiklari degisikliklerin gecmisini tutmak, gerektiginde kodun bir onceki halini geri donmek icin projelerini “Git , CVS” gibi  open source “version control” uygulamalari kontrol ediyorlar (Storage bilenler icin Volume un snapshot ini almak veya Windows icin Shadow Copy gibi bisiy)
  • Daha sonra yazilimci kodunu birde ortak calistigi ve/veya elindeki kodlarinda bir anlamda yedegini tutacak olan bir depo ile entegre olmus olsun mesela bu GitHub , GitLab veya Bitbucket a koysun
  • Jenkins burada devreye girmeye basliyor , yazilimci , projeden sorumlu kisi ne ise “Jenkins” uzerinde bir “WorkSpace” aciyor, yani bir calisma alani , kodlarin duracagi yer ki buradan build edecek.
  • Jenkins bilesen destegi sayesinde GitHub , GitLab veya Bitbucket ile entegre oluyor
  • Yazilimci kodunu remote repo denilen yani GitHub , GitLab veya Bitbucket a “Push” ettiginde, yani gonderdiginde Jenkins bileseni mail ile veya farkli bir API call ile uyariliyor ve degisikligi “WorkSpace” e cekiyor
  • Yazilimicinin kullandigi dile gore mesela Java ise Ant/Maven/Gradle gibi build tool larini , Shell Script icin Python, Ruby , Groovy ve .Net icin MSBuild ve Powershell kullanabiliyor Jenkins
  • Buradaki amac kod degisikligi oldugunda yeni kaynak kodlarin derlenip yazilimin hazir hale gelmesini saglamaktir.
  • ****Bu noktadan sonra Continues Delivery olayina girmeye basliyoruz ****
  • Bunla beraber yazilimin yeni kullanilabilir kopyasini devreye alamadan once bir dizi kontrolden ve testden gecirmek gerekecektir ;
    • JUnit : Java Test Framework – http://www.mkyong.com/tutorials/junit-tutorials/
    • TestNG : Java
    • Findbug : Java static bug arama http://findbugs.sourceforge.net
    • Covertura : Yine Java
    • PMD : Kullanilmayan degiskenler , gereksiz object yaratimlari gibi seyler kontrol ediyormus
    • PyTest : Python icin http://pythontesting.net/start-here/
    • Checkstyle : Kodlama standartini kontrol ediyor ,hey yavrum benim
    • Selenium : Firefox browser kullanaraktan browser uzerindeki islemleri otomize edebiliyoruz
    • HP nin bir tool u var UFT -> https://wiki.jenkins-ci.org/display/JENKINS/HP+Application+Automation+Tools
      • –> Bu islemler sirasinda duruma gore Jenkins Job Status guncellenir (Success,Unstable,Broken,Disabled)
  • Yukardaki islemler sonrasinda yazilimci uyarilir🙂 Email ,Twitter , RSS ….
  • Eger build asmasinda bir hata ile karsilasilir ise geriye dogru bilgilendirme yapilaraktan ilgili hatanin giderilmesi ve tekrar derleme safasina kadar islemin otomatik olarak tekrarlanmasi gerekir Screen Shot 2015-11-17 at 02.10.43
  • Hersey tamam olduktan sonra “Docker” veya farkli bir ortama “User Acceptance” almak icin yani kisaca onay almak icin kurulum yapabilir ve build icin approve bekleyebilirsiniz
  • Test muhedisleri , ilgili yazilimci veya kullanicidan test hakkinda olumlu donus aldiktan sonra uygulamanizi gercek ortam a release edebilirsiniz

Bu anlattiklarimizi bir iki resimle anlatmak istesek ;

Screen Shot 2015-11-17 at 02.24.49

veya bu ;

Screen Shot 2015-11-17 at 02.20.09

 

Bu arada Jenkins java disinda ; Python , .Net , Node.js , Ruby , Android , Scala , Perl , C++ gibi diger projeleride destekliyor.
Jenkins nerdeyse butun platformlari destekliyor mesela Windows , Ubuntu , MacOSX , FreeBSD , OpenBSD , Solaris, Gentoo
Her proje icin ayri ayri Jenkins instance larinin kurulmasina gerek yok , proje bazli erisim mevcut

 

Guzel Linkler ;

Bir abla anlatmis rackspace den bakmak isteyenlere http://blog.rackspace.com/diving-into-continuous-integration-as-a-newbie/
Bir suru guzel link var burada http://www.fullstackpython.com/continuous-integration.html

Posted on 17/11/2015, in CI/CD and tagged , , . Bookmark the permalink. Leave a comment.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: