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

--

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

Bir önceki yazımız ile atlassian ürün ailesine ait uygulamalar ile DevOps ve özellikle sürekli entegrasyon için gerekli ön hazırlıkların tüm aşamalarını anlatmış olduk. Bu yazımızda ise [BITBUCKET+BAMBOO] , [JIRA+CONFLUENCE] , [BAMBOO+BITBUCKET+SONARQUBE] ve [JIRA+BITBUCKET] entegrasyonlarını gerçekleştirip tüm DevOps sürecimizde ki proje olarak başlayan işlerimizin bir ürün olarak tüketilmesine kadar olan kısmı otomatize etmeye çalışacağız.

[JIRA+CONFLUENCE] ENTEGRASYONU

Jira ve Confluence uygulamaları birbirleri ile entegre şekilde çalışarak sürekli entegrasyon için kurguladığımız adımları tamamlayıp projenin ve uygulama geliştirmenin tüm aşamalarındaki çıktıları , belgeleri bir doküman yönetim sistemi gibi arşivleyip kullanımımıza çıkartmaktadır.

Teknik açıdan atlassian ürünleri Application Link adını verdikleri bir ilişki üzerinden entegre şekilde çalışmaktadır. Burada confluence uygulaması içinde administration kısmından ‘configure application link’ diyerek jira sunucumuzun adresini vererek 2 uygulama arasında gerekli entegrasyonu sağlamış bulunuyoruz.

[JIRA+CONFLUENCE] entegrasyon aşamaları :https://1drv.ms/b/s!AskWoAU3NqUug_Fdljq9-hU9_YNfAw

[JIRA+BITBUCKET] ENTEGRASYONU

Jira ve Bitbucket uygulamalarının birbiri ile entegrasonu [Jira+Confluence] entegrasyonunda olduğu gibi bir Application Link üzerinden gerçekleştirilmektedir. Bitbucket administration kısmından ‘configure application link’ diyerek jira sunucu adresini girerek entegrasyonu sağlamış bulunuyoruz. Artık jira uygulaması 2 uygulama ile birlikte entegre çalışmaktadır.

[JIRA+BITBUCKET] entegrasyon aşamaları :https://1drv.ms/b/s!AskWoAU3NqUug_FbCPb8Snx5W36UWA

[BAMBOO+BITBUCKET+SONARQUBE] ENTEGRASYONU

Bu entegrasyon ile birlikte geliştirmekte olduğumuz kodlarımızı, belirlediğimiz ‘Branch & Merge’ stratejilerine uygun bir şekilde düzenlenip master branch’e gönderip merge ederken ya da bir build işlemi gerçekleştirirken bir statik kod analizinden geçirmeyi planlıyoruz.Bu sonuçları sonarqube web arayüzü üzerinden izleme ve kod kalitesini belirlerdiğimiz kriterlerde kontrol etmeyi daha önceden kurulumunu yaptığımız sonarqube sunucusu ile gerçekleştireceğiz.

Bu entegrasyonu yaparken hem bitbucket sunucusunda hem de bamboo sunucusunda sonar add-onn’unu yüklemiş olmamız gerekmektedir.Gerekli yükleme işlemini yaptıktan sonra sonarqube sunucumuz ile ilgili gerekli sunucu ayarlarını yapıp elde edilen raporların hangi sunucuda analiz edilip , gerekli raporların bize sunulacağını belirliyoruz. Buradaki süreci kısaca anlatmak gerekir ise bamboo sunucusu üzerinde bir build işlemi gerçekleştirilirken belirlediğimiz kriterler doğrultusunda bitbucket ve bamboo sunucularına yüklediğimiz add-onlar sayesinde bir statik kod analizi gerçekleştiriliyor. Bu toplanan bulgular yaptığımız ayarlamalar doğrultusunda belirlediğimiz sonarqube uygulamasına analiz edilmek üzere gönderiliyor. Dikkat edilmesi gereken bir husus olarak sonarqube sunucusu üzerinde sonar uygulamasını haricinde analiz için düzenlenmiş sonar-scanner-msbuild executable uygulamasının bulunuyor olması gerekmektedir. Ayrıca bu kısımda bamboo build adımlarında kullanabilmek adına sonar-scanner-msbuild klasörü içinde SonarQube.Analysis.xml dosyasında gerekli ayarlamaların (Sonar web arayüzüne girerken kullandığımız login bilgileri [user=admin, password=admin] ve sonar sunucusunun bilgileri) yapılmış olması gerekmektedir. Aynı işlemi remote agent sunucusu üzerinde de gerçekleştirmeyi unutmamak gerekir.

[BAMBOO+BITBUCKET+SONARQUBE] entegrasyon aşamaları :https://1drv.ms/b/s!AskWoAU3NqUug_FcoS5Wyn-YCMwiVw

[BITBUCKET+BAMBOO] ENTEGRASYONU

Son ve en kapsamlı entegrasyonumuz olan bitbucket ve bamboo entegrasyonu için tüm adımları bu bölümün altındaki entegrasyon adımları linkinden detaylı olarak takip edebilirsiniz. Öncelik ile kurulumunu tamamlamış olduğumuz remote agent sunucusuna bağlanarak build senaryolarında kullanmamız gereken tüm yardımcı build araçlarını kuruyoruz. Bamboo sunucusundan kontrol ettiğimizde kullanabileceğimiz bir tek MSBuild v4.0 executable uygulaması olduğunu görüyoruz.

Dolayısı ile remote agent sunucusu üzerinde Microsoft.NET 3.5 ve 2.0 featurelarını aktif ediyoruz. Ayrıca sonar-scanner-msbuild , dotnet-sdk-2.1 ,Git ve Nuget build araçlarını kuruyoruz.Bazı build işlemlerinde kullanmak adına Visual Studio 2017 build tool kuruyoruz. Daha sonrasında bamboo sunucumuza geçerek build aşamalarında birer task olarak kullanacağımız bu tooların gerekli yollarının verileceği ayarlamaları yapıyoruz. Bunun için agents sekmesinde remote agent seçilerek, capabilities sekmesinden add executables ile gerekli tüm build tooları eklemek gerekiyor. Örnek bir eklemeyi aşağıdaki resimden inceleyebilirsiniz.

Tüm build toollar eklendikten sonra bamboo sunucusunda oluşan görünüm aşağıdaki şekildedir.

Artık bitbucket tarafında bir proje açarak içine bir repository oluşturabiliriz.Bu işlemleri tamamladıktan sonra önce proje bazında sonrasında repository bazında sonar add-onn’u için gerekli ayarlamaların yapılması gerekmektedir.

Burada sonarqube için oluşturduğumuz Global_Config ayarlarını kullanacağız. Ayrıca ileride kullanmak üzere bir project key oluşturacağız.Project key için sonarqube , bitbucket ve bamboo için aralarındaki ilişkiyi sağlamakla yükümlü bir anahtar diyebiliriz. Bitbucket > Add-Ons > Sonar üzerinde “Project, Issues, Duplicate Code, Test Coverage , Statics, Merge Checks, Provisioning ve Advanced” ayarları yapılabilmektedir. Bu kısımda Project ayarlamalarında analiz modu ve plug-in’i hangi branch ön tanımları için çalıştıracağımız konusuna dikkat etmek gerekiyor. Biz “branch-based” analiz modu ve “feature/hotfix/bugfix/release” ön tanımlamaları için çalıştıracağımızı belirtiyoruz.

Bitbucket security sekmesinden branch permissions kısmında development branching model olarak belirlediğimiz branch tipi ile devam ediyoruz. Pull request sekmesinde merge checks kısmında pull requestler için belli kriterler belirleyebiliriz. Ben her pull request’te ilgili istek için en az 1 kişinin onay vermesi gerektiğine dair bir kural belirledim. Default reviewers ile bu onayı verecek standart kişilerin atamasını yapabilirsiniz.

Bu kısmı tamamladıktan sonra bitbucket üzerindeki repository ayarları kısmında sonaradd-onn’unu enable yapabilmek adına gerekli ayarlamaları yapmaya başlıyoruz. Burada oluşturduğumuz projenin bir karşılığını sonarqube sunucusunda yayında olan sonar.ui uygulamasına girerek oluşturmamız gerekmektedir. Default kullanıcı adı ve şifre olan “admin” ile giriş yaparak projemizi oluşturuyoruz.

Bu sayede artık bitbucket uygulaması üzerinde repository settings alanında sonar ayarlarından ilgili projenin atamasını yapabiliyoruz.

Bitbucket üzerinde hem proje bazında hem repository bazında ayrıca sonarqube üzerinde proje oluşturma ile ilgili gerekli ayarlamaları yaptıktan sonra artık bamboo sunucusunda gerekli işlemleri yapmaya başlayabiliriz.Bu kısımda bitbucket tarafında oluşturmuş olduğumuz proje senaryosunun karşılığını oluşturmamız gerekmektedir ve bu projeleri daha önceden oluşturmuş olduğumuz ve kullanmak üzere olduğumuz project key üzerinden birbirine bağlamamız gerekmektedir. Ben key olarak ‘DEV’ tanımını seçtiğim için bu tanım üzerinden ilgili projeleri birbirine bağlıyorum.

Bu işlemi gerçekleştirirken bitbucket taraflı repository adına bir build işlemi yapmak istediğimiz için bamboo bizden uygulamalar arası iletişim sağlanması adına (BAMBOO ve BITBUCKET) application link istemektedir. Bağlantıyı oluşturduktan sonra artık iki uygulama aynı proje üzerinden karşılıklı olarak işlemlerini yürütebilecektir.

Artık bamboo sunucusu üzerinde bir proje olarak oluşturduğumuz yapıda , bir build plan olusturarak içine bazı joblar ve tasklar tanımlayabiliriz. Burada karşımıza “Stage, Job, Task ” kavramları çıkıyor. Stage bizim için build planımız içindeki her bir paralel yürütülebilen operasyondur. Her stage içinde birden fazla Job barındırabilir. Ve her job’un içinde tasklar ile işlemler sürdürülebilir. Aşağıdaki resim bu kavramları anlamak için biraz yol gösterici olacaktır diye düşünüyorum.

Bizim senaryomuzda tek bir stage içinde bir job ve bir kaç tasktan oluşan bir kurgu mevcut. Bunların hepsi bizim build planımızı oluşturmaktadır. Oluşturmuş olduğumuz bu plana öncelikle bitbucket tarafındaki kodumuzu tanıtmak adına repository mizi gösteriyoruz.

Artık build senaryomuzu oluşturabiliriz. Senaryonun tüm taskları için detaylar aşağıdaki entegrasyon linki içinde mevcuttur. Kısaca bu senaryo şu şekilde işleyecektir öncelikle kaynak kod bitbucket sunucusunda kontrol edilecek, gelen kodun nuget paketleri restore ederek build işlemini ve sonar kod analizini başlatacağız. Herhangi bir build hatası var ise bunu sonar analizi için toparlayıp , analizi bitireceğiz. Daha sonrasında var ise unit testlerimizi çalıştırıp bunların analiz sonuçlarını parse ederek test datası elde etmiş olacağız. Kodumuzu herhangi bir unit test eklemediğimden dolayı şimdilik Unit Test analizini disable durumda oluşturdum.İstenildiği takdirde bu tasklarda enable edilebilir.

Tüm bu işlemleri tamamladıktan sonra artık test senaryosunu işletebilecek duruma gelmiş bulunmaktayız.

[BITBUCKET+BAMBOO] entegrasyon aşamaları :https://1drv.ms/b/s!AskWoAU3NqUug_FenqRLwRqgZyXWcw

TEST SENARYOSU

Artık kurgulamış olduğumuz tüm sistemi bir test senaryosu ile pekiştirerek sonuçlarını inceleyebiliriz. Bu senaryoda tüm sistemi test etmek yerine bir yazılımcı gözü ile testi çalıştırmak istiyorum. Senaryoya masterdan alınan bir feature branch üzerinde yapılan değişikliklerin tekrardan mastera merge etmek için bitbucket’a gönderiyoruz. Bitbucket üzerinde pull request oluşturarak ,bamboo ile build aşamalarının çalışmasını ve toplanan statik kod analizi sonuçlarının sonarqube ile raporlanmasını sağlayacağım.

İlk aşamada Visual Studio ile localimize aldığımız master repository üzerinden bir feature branch oluşturuyoruz. Ve bunun üzerinde bir yorum satırı oluşturarak Commit ekleyip git push ile feature branchimizi bitbucket’a yolluyoruz.

Sonra bu branch üzerinde bir pull request oluşturarak bamboo üzerindeki build planını tetikliyoruz.Burada tüm sistem üzerinde tek kişi olarak çalıştığım için pull requestlerdeki zorunlu onay verme durmunu geçici olarak kaldırdım.Takım halinde çalışıldığı zaman tekrardan aktif edilebilir.

Eğer push ettiğimiz branch üzerinde build olmasına ilişkin herhangi bir hata yok ise bamboo üzerinde kodun build edildiğini yeşil bir işaret ile görebileceğiz.

Sonra sonarqube üzerinden oluşan kod analizimizi inceleyebiliriz.

Code review yaparken bir çok noktada bizlere ipucu sağlayabilecek bir analiz çalışması sonarqube arayüzü ile karşımızda duruyor.

İstenildiği takdirde bazı kriterlere göre bu analiz çalışmasını bizde şekillendirebiliriz.

Build olan kodumuzu bamboo remote agent sunucusu üzerinden inceleyebiliriz. İstenirse bu build senaryosu üzerine continuous delivery senaryolarıda türetilerek gerekli çalışmalar gerçekleştirilebilir.

TEST SENARYOSU aşamaları :https://1drv.ms/b/s!AskWoAU3NqUug_Fi26TluHUovG620A

DevOps ve sürekli entegrasyon ile ilgili tüm teknik entegrasyonları , ilgili mimari üzerinde gerçekleştirdiğimiz ve bir senaryo üzerinden kısmi anlamda test ettiğimiz yazımızın sonuna geldik.

Uçtan uca bir sistemi genel hatları ile aktarabilmiş olmanı verdiği şevk ile bir daha ki yazıda iş analistlerimizin JIRA kullanarak bizlere oluşturmuş olduğu taskların , yazılım geliştirme takımları tarafından BITBUCKET üzerinde yürütülerek , BAMBOO ve SONARQUBE kullanarak gerekli build işlemlerinin yapıldığı ve tekrardan JIRA üzerindeki taskların tamamlandığı , çıktıları CONFLUENCE üzerinde tutulduğu bir senaryo ile görüşmek üzere…

“Build ONCE , deploy MANY…”

--

--

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ı.