Category Archives: CI/CD

Yazilim/Sistem Terimleri ve Uygulamalari – Bir Sistemcinin Yazilim Dunyasiyla Imtahani – Episode 2

A


 

  • Ad-hoc Query : Bildigimiz SQL sorgusundan farki yok fakat kendisi anlik snapshot gibi , o andaki sorgunun sonucu anlaminda, bakiniz –> http://stackoverflow.com/questions/2460954/what-is-ad-hoc-query
  • Ant : Built tool . Java icin kullaniliyor , daha once “Unix Make” kullanilirken cikan problemleri bertaraf etmek icin uretilmis.

B


 

  • Bamboo : Jenkins alternatif (bkn. Jankins) -> Firma : Atlassian
  • Bitbucket : Enterprise surum kontrol sistemi -> Firma : Atlassian

C


 

  • Cruise Control : Jenkins alternatif (bkn. Jankins) Open Source

D


 

  • Developer Advocate : Yazilim gelistirici ile platform arasinda baglantiyi kuran kisi , dokuman yaziyor , isleri kolaylastirmaya calisiyor , iliski kuruyor yazilimcilarla , community guclendiriyor/destekliyor , super bi adam iste 🙂

 

E


 

  • Eclipse  : IDE

G


 

  • Git : Yazilim gelistiricileri icin surum kontrol sistemi . Kendini diger surum kontrolculerden farkli gordugu yerler var
    • Dosya degisikliklerini izlemektense snapshot ile o anki bir butunun durumunu kontrol ediliyor
    • Local de calisiyor , x bir andaki gecmise ait islemleri gormek icin network baglantisina ihtiyaciniz yok
    • Veriyi bir db de ( blob based / ->/Users/vahricmuhtaryan/.git/objects) , verinin degistirilememsi icin SHA1 ile hash lenmisitir
    • (Git ile dosyalarin durumu) -> Commit / Modified / Stage : Commit -> Dosyalar kaydedilmis ve Git deposunda, saglamda demek , Modified : Uzerinde degisiklik yapilmis fakat Stage area da degil demek (muhtemel working directory yani calisma dosyalarinizin oldugu yer),  Stage bir sonraki “commit” e hazir . Buradaki olay working directory ile commit arasinda bir katman daha yaratmak gerektiginde istediginiz dosyanin komit edilmemesinide saglayabilirsiniz , tum yonetim sizde.
  • GitHub : Web tabanli hosted git depo’su .
  • GitLab : Web tabanli hosted git depo’su .
    • Compare 1 : https://about.gitlab.com/2015/01/20/github-enterprise-vs-gitlab-enterprise-edition/
  • Gitter – Kendi community’ni kur , yazis deliler gibi https://gitter.im
  • Gradle : Build Tool

I


 

  • IDE (Integrated Development Environment) : Genelde grafik ara yuzu olan bir editor , icinde derleyici , debugger yani hata ayiklayicisi olan uygulama.
  • IVY : Dependecy Manager https://www.youtube.com/watch?v=DtkgAAT91E0

J


  • Jenkins (Hudson) : Continues Integration Software
    • Cok Moduler (Multiple Plugins)
    • Hem kod depo lari ile entegre ; github , gitlab , bitbucket
    • Hem IDE lerle entegre ; Eclips , Netbeans
    • Hem kod test urunleri ile entegre
    • Hem bug tracker larla entegre : MantisBT
      • Compare : https://en.wikipedia.org/wiki/Comparison_of_continuous_integration_software
  • Jar : Java archive . Iceriginde Java kutuphaneleri , gecici dosyalar (Properties File) ve kaynak (Resource File) dosyalari icerir.
  • JSP : html tag + java tag ve java kodu. Server tarafinda derlenir , dinamik web siteleri yaratir.

M


 

N


 

  • NAnt : Free .Net build tool.
  • Nutshell (In a nutshell) : In a few words , yani “KISACASI” veya “UZUN LAFIN KISASI”:)

O


 

P


  • Properties File : Java Properties File ,  bir projenin/uygulamanin konfograsyon verisi ve ayarlarini tutan bir dosya. Ornek : https://www.mkyong.com/java/java-properties-file-examples/

 

R


  • Reference Data : Kendisi bir nevi konfigrasyon datasi sayilabilir , uygulama tarafindan okunabilen (read only) fakat sadece bir admin arayuzu veya mudahelesi ile degistirilebilen , yayinlama (deployment) zamaninda tekrardan yaratilan , uygulamanin ilgili veri olmadan calisamayacagi tanimlama , belki drop-down list , belik vergi gibi x bir bilgiyi iceren veri veya veri kumesi.
  • Resource File : Imaj , video veya cesitli key/value ciflerinin oldugu dizin ve dosyalara verilen ad. https://developer.android.com/guide/topics/resources/providing-resources.html

 

S


 

T


 

 

U


 

V


 

  • Visiual Studio : Microsoft .NET Development IDE

W


  • War File : Java’da web arsiv dosyasi olarak bilinir. Icersinde Web Uygulamasini icerir. Servlet kutuphanelerini + JSP dosyalarini + Imaj Dosyalarini + HTML dosyalarini iceren jar dosyasi olup uzantisi .war’dir.
  • Web Crawler / Web Spider : Internet bot , Sistematik bir sekilde Web Indexing icin WWW tarayan bot.

 

 

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