Serkan Bingöl
AWS Certified User Group Turkey
8 min readNov 27, 2018

--

CI/CD SÜREÇLERİ — 1 [JIRA — BITBUCKET — BAMBOO — CONFLUENCE — SONARQUBE ENTEGRASYONU]

Son yıllarda bilgi işlem süreçlerinin yazılım süreçleri içine daha çok dahil edilmesi ile ortaya çıkan “Dev-Ops” kavramı geniş bir çerçevede incelenmelidir.

“Dev”, genelde yazılım geliştiricileri için kullanılır, ancak gerçekte daha geniş bir topluluğu temsil eder ve “yazılım geliştirme için çalışan herkes”i kapsar. “Ops”, “Dev”e göre daha geniş bir kapsamı olup sistem mühendisleri, sistem yöneticileri, sürüm mühendisleri, veritabanı yöneticileri (DBAs), network mühendisleri, güvenlik uzmanları ve daha birçok değişik alt disiplinler için kullanılır.

DevOps kavramı ile ilgili derinlemesine bilgi almak için linkteki kaynağı inceleyebilirsiniz. Ayrıca kapsamlı bir 2018 yol haritası ile bu kavramı incelemek için ilgili linkteki yazıyı gözden geçirmek faydalı olacaktır diye düşünüyorum.

Yazılım geliştirme süreçlerinde proje çıktılarının hızlı bir şekilde kullanıma ve dağıtıma hazır hale getirilmesi işlemi günümüzde giderek önem kazanmıştır. Özellikle dağıtık mimarilerde, ilgili paketlerin, kütüphanelerin derlenerek yığınlar halinde oluşturulması ve bu yığınların sistem içindeki kontrolünün sağlanması , tekrar eden süreçler için insan gücünün gerekliliği sürekli entegrasyon (Continuous Integration — CI) kavramını karşımıza getirmektedir.

Teknik detaylara girmeden önce kısaca “Sürekli Entegrasyon” kavramını açıklamak gerekir diye düşünüyorum. “Sürekli Entegrasyon” kavramı özellikle çevik süreçlerde sıklıkla duyduğumuz bir yaklaşımdır. Sistem üzerinde yaptığımız değişikliklerin doğrulanıp (build) sonrasında entegre edilmesini (deploy) sağlayan yazılımlardır. Sistem üzerindeki değişiklikler sonucu kırılmış , hatalı olan ve projenin derlenmesini engelleyen hataları belirli notifikasyonlar aracılığıyla geliştirici ekibe bildirerek hızlı aksiyon alınmasını sağlarlar. Test projeleri ile bu gibi sistemlerin , sürekli olarak test edilmesi sağlanmış olur. Bu sistemler kodların depolandığı ve versiyonlandığı sistemler ile entegredirler. En temel anlamda bu sistemler otomatik build ve deployment sağlarlar.

Aşağıdaki resim sürekli entegrasyon sistemlerin yaptığı işi temel olarak açıklıyor.

CONTINUOUS INTEGRATION — BASICS

Sürekli entegrasyon sistemlerini bir çok ürün ile kurgulayabiliriz. Bu yazı ile Atlassian ürünlerinin kullanılması ile ilgili tecrübelerimi aktarmaya çalışacağım. Bu Mimari yapıda , Git veya Mercurial gibi versiyon kontrol sistemleri kullanan projeler için bir web depolama servisi olan Atlassian BITBUCKET , çevik (AGILE) metodları desteklemesi ile yazılım ekiplerinin iş, hata takibi ve proje yönetiminde kullandığı Atlassian JIRA , sistem üzerinde yaptığımız değişikliklerin doğrulanıp (build) sonrasında entegre edilmesini (deploy) sağlayan yazılım olan Atlassian BAMBOO ,oluşturmuş olduğumuz kodlar üzerinde statik kod analizi yapabileceğimiz SONARQUBE ve tüm projede oluşturacağımız dokümanlar ve bilgiyi saklayıp yönetebileceğimiz bir doküman yönetim sistemi olan Atlassian CONFLUENCE ürünlerini kullandım. Tüm bunları gerçekleştirirken ilgili uygulamaların verilerini saklamak için, ücretsiz ve açık kaynak kodlu bir nesne ilişkisel veri tabanı sistemi olan POSTGRESQL veri tabanı sistemini seçtim.

Aşağıdaki resimden atlassian ürün ailesine göre planlanmış sürekli entegrasyon şeklini inceleyebilirsiniz.

CONTINUOUS INTEGRATION — ATLASSIAN

Sistem Gereksinimleri

Genellikle [JIRA +CONFLUENCE] , [BITBUCKET + BAMBOO+ SONARQUBE] ve [BAMBOO REMOTE AGENT] için 1'er adet toplamda 3 adet sunucu üzerinde kurgulanan yapılar ile karşılaştım.Ben bu çalışmada her uygulamayı bir sunucu üzerinde kurgulayarak ilerlemek istedim.

Kurgulanan yapı için toplamda 6 adet sunucuya ihtiyaç duymaktayız. JIRA , BITBUCKET ,CONFLUENCE , SONARQUBE , BAMBOO ve REMOTE AGENT için gerekli kurulum dosyaları ve sistem gereksinimleri için detayları aşağıdaki linklerden inceleyebilirsiniz.

Git Version Control System : https://git-scm.com/download/win

POSTGRESQL : https://www.postgresql.org/download/windows/

JIRA : https://confluence.atlassian.com/adminjiraserver/installing-jira-applications-on-windows-938846835.html

BITBUCKET : https://confluence.atlassian.com/bitbucketserver/install-bitbucket-server-on-windows-867338403.html

BAMBOO : https://confluence.atlassian.com/bamboo/installing-bamboo-on-windows-289276813.html

CONFLUENCE : https://confluence.atlassian.com/doc/confluence-installation-guide-135681.html

SONARQUBE : https://docs.sonarqube.org/7.4/setup/overview/

REMOTE AGENT : https://confluence.atlassian.com/bamboo/bamboo-remote-agent-installation-guide-289276832.html

Bu yapı için Microsoft Azure portalından oluşturduğum 6 adet VM (Sanal Makina) üzerinde Windows Server 2012 R2 işletim sistemini kullanmak istiyorum. Bunun için Azure Sanal makinalar üzerinde B Serisinden B2ms , B2s ve DS1_v2 tipindeki makinalardan kullanıyorum. Mimariyi ele alırken istenildiği takdirde tüm uygulamalar tek bir sunucu üzerinden yayına alınabilir.

POSTGRE VERİTABANI KURGUSU

Tüm uygulamaları kurarken bütün sunucularda PostgreSQL veritabanı kullanıldı. Kurulumu çok basit olan postgresql veritabanı için aşağıdaki linkteki adımları takip ederek bir kurulum gerçekleştirebilirsiniz.

PostgreSQL kurulum aşamaları : https://1drv.ms/b/s!AskWoAU3NqUug_EV8YCec6bKMP5Mkg

JIRA SERVER KURULUMU

JIRA makinası üzerinde yapılacak işlemlerin verilerini tutmak adına bu sunucu üzerinde bir postgresql veritabanı kurulumu yapmamız gerekmektedir. Bu yapıda ben PostgreSql 9.4 Versiyonu ile kurulumlarımı gerçekleştirdim. Yukarıda paylaştığım linkler üzerinden ihtiyacınız olan sürümlere ulaşabilirsiniz. Burada JIRA makinası üzerindeki postgre üzerinde “jiradb” adlı bir veritabanı oluşturduktan sonra “JIRA Server” kurulumuna başlıyoruz.

İlgili kurulum için atlassian web sayfası üzerinden “atlassian-jira-software-7.12.3-x64” sürümünü indirip , express install seçeneği ile kuruluma başlıyoruz. Tüm ekranları geçtikten sonra web browser üzerinden yönlendirildiğimiz ekranda “I’ll set it up myself” seçeneği ile konfigürasyon ayarlarımızı yapmak üzere gerekli açılan ekranda veri tabanımızı (jiradb), “postgres” super user ve belirlediğimiz şifre ile JIRA uygulamasına bağlıyoruz. Gelen ekran üzerinde uygulamaya istediğimiz ismi vererek “Private” mode ile sadece admin tarafından kullanıcıların sisteme dahil edilebileceği modelimizi belirliyoruz.

Deneme sürümleri üzerinden işlemlerimizi yapmak istediğimiz için açılan ekranlarda “generate a Jira tiral licence” seçeneği ile 30 günlük bir deneme lisansı oluşturup admin hesabımızı oluşturup ,şimdilik herhangi mail serverı kurulumu yapmadan adımlarımızı tamamlıyoruz. Artık JIRA CORE uygulamamız, projelerimizi oluşturup tasklarımızı belirlemek adına ayaklanmış bulunmakta. Yazılım projelerimiz için “çevik yaklaşımı” şablonlarına ulaşmak için gerekli uygulamayı JIRA SOFTWARE sürümüne yükseltmek gerekmekte. Dolayısı ile “Applications” ayarlarından “Versions & Licences” kısmından JIRA SOFTWARE içinde bir lisans oluşturulması gerekmekte. Bu lisansı 30 günlük deneme olarak uyguladıktan sonra artık sprintleri koşturabileceğimiz scrum boardları ile projelerimizi takip edebileceğimiz ekranlara ulaşmış bulunmaktayız.

Şimdilik ilk projemizi basit şekilde oluşturup , sonrasında repository’lerimiz oluşturup gerekli kod versiyonlamalarımızı yapacağımız ve belirlediğimiz “branch & merge” stratejilerimizi uygulayabileceğimiz “BITBUCKET” sunucumuzu kurmak üzere işlemlerimizi başlatıyoruz.

JIRA SOFTWARE kurulum aşamaları : https://1drv.ms/b/s!AskWoAU3NqUug_EWyOe8_RWGiaFnwg

BITBUCKET SERVER KURULUMU

Bu kısımda yazılım geliştirme modelimizin kod geliştirme ve branch stratejilerimizin yürütüldüğü ve kontrol edildiği bir web depolama servisi olan “BITBUCKET” uygulamasını ayaklandırarak tüm repolarımızı buradan işleme alacağız. “Branch ve Merge” stratejilerini anlamak ve takip etmek adına linkteki yazıya bakmakta fayda var.

Bu uygulamamız için aynı makine üzerinde bulunan postgre üzerinde “bitbucketdb” adında bir veri tabanı oluşturduk. Bitbucket kurulumu yapılacak makinada “Git” uygulamasının kurulumun yapılmış olması gerekmektedir. Ayrıca git üzerinde default olarak “Visual Studio Code” editörünü kullanmak üzere kurulum yapılacak server üzerinde ayaklandırdık. Bu 2 uygulama kurulduktan sonra “Bitbucket” setup dosyasını çalıştırarak 7990 portu üzerinden yayın yapacak şekilde tüm aşamaları tamamlıyoruz. Burada unutulmaması gereken “7990” portuna izin verirken sistem araması için Elasticsearch için aynı zamanda 7992 ve 7993 portlarına izin verilmesi gerekmektedir. Tüm kurulum işlemleri tamamlandıktan sonra Bitbucket uygulamasını çalıştırarak konfigürasyon işlemlerimize başlıyoruz. Server üzerindeki veritabanını uygulamaya tanıtıp, gerekli lisansı tanımlamak ve uygulama için bir administrator hesabı tanımlamamız gerekmektedir. Bu aşamada Bitbucket uygulamasının JIRA ile entegrasyonu ile ilgili ayarlarının yapıldığı ekranla ilgili herhangi bir işlem yapmıyoruz. Daha sonrasında 3 uygulamada ayağa kalkınca bu ayarlamaları tekrardan manuel olarak gözden geçireceğiz.

Uygulamanın ayarlamaları bitince artık ilgili kod repolarımızın oluşturulabileceği , bunların projelere bağlanabileceği , versiyonlamanın ve kod geliştirme stratejilerinin planlanabileceği ekranlarımıza ulaşmış bulunmaktayız.

Şimdi ise build ve deploy işlemlerimizi yürüteceğimiz “BAMBOO” serverımızın işlemlerini başlatıyoruz.

BITBUCKET kurulum aşamaları : https://1drv.ms/b/s!AskWoAU3NqUug_EZil8CzGE6Qrsg2A

BAMBOO SERVER KURULUMU

Artık oluşturmuş olduğumuz repolarımızdaki kodlarımızın belirlediğimiz şekilde build edilerek gerekli kriterlerden geçerek deploy edilebileceği yardımcı uygulamamız olan “BAMBOO” uygulamasını kurgulamaya başlayabiliriz.

İlgili kurulumu başlatmadan önce sunucuda “Java SDK” ve “Git” uygulamasının yüklü olduğundan emin olarak , sistem özellikleri içinde enviroment variables için “JAVA_HOME” ve “JRE_HOME” yollarını tanımlamayı unutmayın.

Artık BAMBOO uygulamasının kurulumunu başlatarak ilgili adımlar takip edebiliriz. Tüm adımlar tamamlandıktan sonra bamboo uygulamasının ayarlarının yapılacağı web arayüzüne ulaşmak adına “c:\Program Files\Bamboo\bin\” klasöründe “start-bamboo.bat” komutunun çalıştırılması gereklidir.

Web arayüzümüze ulaştıktan sonra bu uygulama için oluşturacağımız lisansı girip , ayar ekranlarımıza devam ediyoruz. Burada istenilirse Bamboo uygulamasının işlemlerini yürüteceği servisi aynı sunucu üzerinde kurgulayabiliriz. Bu konudaki best practiceler için ilgili yazıyı okuyabilirsiniz. Ben burada ileride build sürelerini kısaltmak ve bamboo sunucusunun üzerindeki karmaşık yapılardan biraz daha sırılmak adına remote agent kullanmayı planlıyorum. Daha sonrasında istersek bu agenti local agent ile değiştirme hakkına sahibiz.

Bu işlemimizi gerçekleştirdikten sonra veritabanı bağlantımızı gerçekleştirerek , uygulama için yönetici hesabımızı oluşturup artık “Bamboo” uygulamamızı kullanmaya başlayabiliriz.

BAMBOO kurulum aşamaları : https://1drv.ms/b/s!AskWoAU3NqUug_ESBq5E8MSoEIwseQ

CONFLUENCE SERVER KURULUMU

Proje Yönetimi içinde oluşturmuş olduğumuz dokümanları bir yerde toparlamak , yaptığımız analiz çalışmalarını ve edindiğimiz bilgileri paylaşmak adına tüm bu sistem ile entegre çalışarak DevOps üzerinde “Sürekli Entegrasyon” süreçlerine destek olacak bir doküman yönetim sistemi olarak “CONFLUENCE” uygulamasını proje sistemimize dahil ediyorum.

Bu uygulama içinde bulunduğu server üzerinde bir postgre veri tabanı oluşturarak. Gerekli kurulum işlemlerini adım adım tamamlayıp , bir yönetici hesabı oluşturarak ilgili proje çıktılarımızı yönetebileceğimiz “CONFLUENCE” uygulamasını ayağa kaldırmış olduk.

Bu uygulama aslında bir “wiki” sitesi gibi kullanılırak bilgi, doküman, haber, vs. paylaşımı yapılabilen bir portal. Confluence’u kullanarak ister şirketinizin web sitesini hazırlayabilir, isterseniz ürünlerinizin dokümantasyonunu yapabilirsiniz.“JIRA” proje yönetim uygulaması ile bütünleşik çalışabilmesi dolayısı ile oluşturduğumuz projelerin tüm ilgili belgelerini ve çıktılarını bu uygulama üzerinden versiyonlamak ve yönetmek mümkün olacaktır.

CONFLUENCE kurulum aşamaları : https://1drv.ms/b/s!AskWoAU3NqUug_Ef6aXE8UhLEvTIuQ

SONARQUBE SERVER KURULUMU

Artık oluşturmuş olduğumuz repolarımızdaki kodlarımızın belirlediğimiz şekilde statik analizlerinin yapılabileceği ve bunları bize bir rapor ekranından sunabileceği yardımcı uygulamamız olan “SONARQUBE” uygulamasını kurgulamaya başlayalım.

İlgili kurulumu başlatmadan önce sunucuda “Java SDK” ve “Java RE” uygulamalarının yüklü olduğundan emin olarak , sistem özellikleri içinde enviroment variables için “JAVA_HOME” ve “JRE_HOME” yollarını tanımlamayı unutmayın.

Artık SONARQUBE uygulamasını belirlediğimiz bir dizin altına extract edip içindeki “sonar.properties” config dosyasını bir text editör yardımı ile açıp gerekli düzenlemelerimizi yapmamız gerekiyor. Burada zaten bağlanabilecek tüm veritabanları ayarları yorum satırları ile karşımıza çıkıyor.

Biz POSTGRE veri tabanı kullandığımız için aşağıdaki resimlerde belirtilen satırları kendi ayarlarımıza göre düzenleyip web arayüzü için gereken “StartSonar.bat” komutunu çalıştırıyoruz.

Resimden anlaşılamaması halinde aşağıdaki kod bloklarını text editörünüz yardımı ile bularak gerekli düzenlemeleri yapabilirsiniz.

sonar.jdbc.username=sonarqube
sonar.jdbc.password=mypassword
sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube

Sonrasında ilgili servisi ( “bin/windows-x86-XX/StartSonar.bat”) çalıştırarak (“http://localhost:9000") adresinden uygulamanın web arayüzüne ulaşabiliriz.

SONARQUBE kurulum aşamaları : https://1drv.ms/b/s!AskWoAU3NqUug_EgutRIctDsfOBlYA

REMOTE AGENT SERVER KURULUMU

Son olarak BAMBOO uygulaması içindeki işlemleri yapmakla yükümlü olan agent servisimizi ayrı bir sunucu üzerinde kurgulayarak build ve deploy işlemlerini bu sunucu üzerine taşımış oluyoruz.

Bu kısımda Bamboo sunucusu üzerindeki bir local agent yerine başka bir sunucuda remote agent ile build işlemlerini yaptırmamız aslında bize bamboo sunucusunda ki komplike işlerden build mekanizmasını ayırarak hız kazandırmaktadır.

Burada dikkat edilmesi gereken husus , remote agent sunucusu üzerinde bamboo web arayüzünden indirmiş olduğumuz agent setup dosyasını bir klasöre göndermek ve bu setup dosyasını komut satırı üzerinden çalıştırarak gerekli bağlantının yapılmasını sağlama konusudur.

Bu işlemi yaptıktan sonra Bamboo web arayüzü üzerinden local agenti kaldırarak remote agent için gerekli onayın verilmesini sağlamaktır.

Bu işlemi gerçekleştirdikten sonra remote agent bağlantısı bamboo sunucusu ile gerekli entegrasyonu gerçekleştirmiş olacaktır.

REMOTE AGENT kurulum aşamaları : https://1drv.ms/b/s!AskWoAU3NqUug_EiFprrxD4Yxr-3tQ

“Sürekli Entegrasyon” ile ilgili entegrasyonları yapacağımız 5 uygulamamızı ve “Remote Agent Servisimizi” ayağa kaldırdıktan sonra yazımızı şimdilik burada bitiriyoruz.Bir daha ki yazımızda bu 5 uygulamanın birbiri ile birlikte entegre çalışmasını sağlayarak bir projenin iş takibi , yürütme , kod geliştirme ve derleme ,kod analiz ve proje doküman yönetimi aşamalarını uçtan uca ele alacağız.

--

--

Serkan Bingöl
AWS Certified User Group Turkey

Muzur bir oğlan babası, hayvan sever, Harry Potter hayranı, bazen maceracı düz yazılımcı.