Bitbucket Pipelines Kullanarak CI/CD Akışı Nasıl Sağlanır ?

Abdurrahman Gazi DİŞ
Appcent
Published in
5 min readSep 13, 2022

Herkese selamlar. Bu yazımda bitbucket pipelines kullanarak CI/CD süreci yazımı hakkında bilgi vereceğim. Keyifli okumalar diliyorum şimdiden :)

Bitbucket Pipelines Nedir ?

Bitbucket pipelines; uzak repoda yer alan projelerimiz için herhangi bir sunucu kurmaya gerek kalmadan projemizin build, deploy ve test aşamalarını gerçekleştirmemize yarayan bir CI/CD akış hizmetidir.

Peki CI/CD Kavramları Nedir ?

Yazılım dünyasına yeni başlayan arkadaşlarımızın ve benimde ilk başladığım zamanlar sıklıkla gördüğüm bu iki terim ne anlama geliyor ?

Kavramların açılımları kısaca şu şekilde; CI(Continious Integration), CD(Continious Delivery/Deployment) anlamına gelir.

CI(Continious Integration-Sürekli Entegrasyon)

Sürekli entegrasyon sayesinde projemize yeni commitler atıldığında yani her kod değişikliğinde projenin tekrardan build edilmesi ve test senaryosunun otomatik bir şekilde gerçekleşmesidir. Bu sayede projemiz canlıya alınmadan önce hata olup olmadığı kolay bir şekilde tespit edilebilir.

CD(Continious Delivery/Deployment-Sürekli Teslimat)

Sürekli teslimat sayesinde projemizin canlı uygulama sunucularına yüklenmesi otomatize edilmesi amaçlanmaktadır. Bu sayede projede herhangi bir kod değişikliği olması durumunda projemiz otomatik bir şekilde canlı sunuculara yollanacaktır.

Gerekli Hazırlıklar

Bitbucket pipelines yazmadan önce yapmamız gereken birkaç ayar var. İlk öncesinde repository settings kısmında yer alan ssh settings kısmına gidiyoruz. SSH keyi, kendi sunucumuza bağlanırken erişim yetkisi kazandırmak için kullanacağız. Aşağıdaki gibi sarı alanda yer alan uyarıları takip ederek ilk öncesinde pipelines’i aktif etmemiz gerekiyor.

Aşağıdaki menüden aktif hale getiriyoruz.

Sonrasında tekrar ssh settings menüsüne gelerek generate keys diyoruz.

Burada yer alan public_key anahtarını kopyalıyoruz. Putty terminalini veya herhangi bir ssh terminalini kullanarak sunucumuza bağlanıyoruz.

nano ~/.ssh/authorized_keys

Komutunu kullanarak public_keyimizi en alt kısma ekliyoruz ve Control+O kombinasyonu ile dosyanın üzerine yazıp terminalden çıkıyoruz.

Son olarak ise tekrardan ssh settings menüsüne gidiyoruz ve known hosts alanına kendi sunucumuzu ekliyoruz. Host adress kısmına makine ip adresini yazarak sonrasında fetch butonuna basıyoruz. Devamında ise add host butonuna basarak ekleme işlemini gerçekleştiriyoruz.

Tüm bu adımlar sayesinde bitbucket pipelines içerisinden sunucumuza bağlanmak için yetki almış olduk.

Bitbucket Pipelines Kullanımı

Öncelikle bitbucket.org adresinde üyelik oluşturuyoruz. Daha sonrasında yeni bir repository oluşturuyoruz ve maven projemizi(Java, Spring Boot vb olabilir) repo içerisine push ediyoruz.

Not: Ben örnek olarak maven projesi üzerinden(Spring Framework) anlatım gerçekleştiriyorum. Sizler de kullanmış olduğunuz dil için derleme ve test etme komutlarını birazdan oluşturacağımız bitbucket-pipelines.yml dosyasına entegre etmelisiniz.

Sonrasında sol menüde yer alan pipelines sekmesine geliyoruz. Bu kısımdan maven projesini seçiyoruz.

Karşımıza maven projeleri için varsayılan build ve test etme için hazır bir .yml dosyası geldi. Bitbucket pipeline kurulumunu bu menüler yerine projenin ana dizinine bitbucket-pipelines.yml adında dosya oluşturarak da gerçekleştirebilirsiniz. Biz şuanlık bitbucketin kendi arayüzünden oluşturuyoruz.

Varsayılan Maven Projesi Build & Test Komutları

Biz burdaki komutlar yerine kendi komutlarımızı kullanacağız. Komutlarımız ise genel olarak şu şekilde;

image: maven:3.6.3pipelines:
branches:
develop:
- parallel:
- step:
name: Build,Test And Deploy
caches:
- maven
script:
- mvn -B verify --file pom.xml
- tar -zcf ~/project.tar.gz .
- cd ~
- scp ~/project.tar.gz user@X.X.X.X:~/project.tar.gz
- ssh user@X.X.X.X "rm -rf project&& mkdir project"
- ssh user@X.X.X.X "tar -zxf ~/project.tar.gz -C ~/project"
- ssh user@X.X.X.X "cd project && bash stop.sh"
- ssh user@X.X.X.X "cd project && bash docker-build.sh"
- ssh user@X.X.X.X "cd project && bash start.sh prod"

Yukarıdaki komut bloğumuzu açıklamak gerekirse;

image bölümünde maven imajı seçiyoruz.

Sonrasında bitbucket pipelinesin kendi formatına göre devam ediyoruz. branches: develop: etiketleri ile sadece develop branchinde bir değişklik olduğunda tetiklenmesini sağlıyoruz.

step: etiketi adında da anlaşılacağı üzere adım anlamına geliyor. Dilersek build,test ve deployu 3 adıma bölerek de gerçekleştirebiliriz.

script: kısmında ise bitbucket pipelines içerisindeki yürütülecek komutları yazıyoruz.

Ben projeyi deploy ederken uzak makineye ssh ile bağlanarak projemin sıkıştırılmış halini sunucuya yükleyerek çalıştırıyorum. Bu komutlar sayesinde projedeki develop branchinde herhangi bir değişiklik olduğunda otomatik bir şekilde projemiz sunucuya deploy edilecektir. Sizler dilerseniz branches etiketini kaldırarak projenin genelini kontrol edebilirsiniz.

Benim yazmış olduğum proje spring boot projesi olduğu için, projeyi dockerize ederek bu süreci daha da hızlandırdım. En altta yer alan kendi yazmış olduğum docker-build,start,stop bash komutları ile docker konteynerlarını kolay bir şekilde yönetebiliyorum.

Bitbucket-pipelines.yml dosyasını oluşturduktan sonra otomatik bir şekilde pipelines bölümünde işleme alındığını görebiliyoruz.

İşlemi ise üzerine basarak inceleyebiliyoruz. Yan taraftaki terminal çıktısından build,test ve deploy işlemlerine ait logları görüntüleyebiliyoruz.

Başarılı bir build,test & deploy işlemi

Yukarıda da görüldüğü gibi ilk build,test ve deploy işlemimiz başarılı bir şekilde gerçekleşti.

Kapanış

Bu yazımda bitbucket pipelines kullanarak uygulama build,test ve deploy sürecini otomatize ederek zaman tasarrufu ve proje sürdürülebilirliğini artıracak konulardan bahsettim. İlerleyen zamanlardaki yazılarımda yeni teknolojiler hakkında içerik oluşturmaya devam edeceğim. Görüşmek üzere :)

Kavram Sözlüğü

Build: Projenin derlenme işlemi.

Deploy: Projenin uygulama sunucusunda çalıştırılması.

Repository: Proje kütüphanesi

Push: Yerel makineden proje kütüphanesine aktarım.

--

--

Abdurrahman Gazi DİŞ
Appcent
Writer for

Java Developer @appcent || Linkedin: abdurrahman-gazi-dis