Gitlab CI-CD Pipeline Örneği
Shell Runner & Docker Hub & Docker
Merhabalar,
Bu yazımda gitlab ci ve cd örneği nasıl yapılır onu inceliycez.
Continuous Integration ( Sürekli Entegrasyon ): Sürekli entegrasyon mimarisi yapılan değişiklikler/geliştirmeler sonucu oluşan yeni sürümün, bir boru hattı (pipeline) vasıtasıyla, mevcut sürüm ile sürekli şekilde otomatik olarak birleştirilmesini sağlar. Burada önemli olan nokta sürecin bir boru hattı (pipeline) üzerinden yürütülüyor olmasıdır.
Boru hattı (pipeline) dediğimiz şey aslında süreçleri uç uca eklemek ve ihtiyaçlarımız doğrultusunda akışlara yön vererek otomatize edilmiş bir düzen oluşturmaktır.
Continuous Delivery ( Sürekli Teslimat ) : Sürekli teslimat ise istenilen bir sürümün istenilen bir ortama elle tetiklemek suretiyle deploy edilebilmesidir. Yani biz istemedikçe deployment sağlanmaz, deployment istediğimizde süreci manuel olarak başlatırız.
Normalde ilgili bir sürümü deploy etmek için manuel gerçekleştirdiğimiz tüm adımları komut dosyaları vs. aracılığıyla otomatize ederiz.
Diğer yazımda gitlab ve gitlab runner kurulumuna bakabilirsiniz.
İlk olarak basit bir gitlab.ci.yaml yazalım ve hata alıp düzeltelim.
Yukarıdaki pipeline çalıştığında,
Eğer local gitlabınızda böyle bir hata alırsanız. Çözüm için,
sudo su gitlab-runnercd ..cd gitlab-runnerrm -rf .bash_logout
“.bash_logout” dosyasını silip tekrar pipeline tetiklediğinizde.
Shell türündeki gitlab-runner hazır olduğuna göre CI/CD yapacağımız projeye bakabiliriz.
Örnek senoryamıza bakıcak olursak,
- Local gitlabımızda projenin kodları olacak.
- Projemiz için Dockerfile yazacağız.
- Dockerfile’dan bir image oluşturup Docker hub göndereceğiz.
- Docker hub’daki son image göre deployment gerçekleştirme işlemi yapacağız.
İlk olarak deployment yapacağımız projeye bakalım. Basit bir UI olan web sitesinin frontend tarafı için ci ve cd yazacağız. Projeyi çalıştırdığımızda ekran aşağıdaki gibidir. Geliştirme yapıp gitlab commit attığımızda,
- Docker hub image son halini göndercez ve bu son image ile deployment gerçekleştircez.
İlk olarak local gitlabımıza projenin dosyaları gönderelim.
Projenin dosyaları local gitlab’ımıza göndermiş bulunmaktayız.
Local gitlab’ımı sıfırdan kurduğumuz da docker pipeline çalıştırmak için bazı güncelleştirmemiz gerekiyor. Altaki gibi bir hata alırsak,
sudo chmod 666 /var/run/docker.sock
Sorunu fixledikten sonra pipeline tekrar çalıştırdığımızda,
Pipeline çalıştırdığımızda herhangi bir sıkıntı kalmadığı göre pipeline komple yazabiliriz.
“gitlab-ci.yml” biraz açıklamak gerekirse,
- 3 tane aşamadan oluşuyor. build,push ve deployment
- tags: hangi runner üzerinde çalışacağı söylüyoruz. İstediğiniz specific bir runnerda pipeline koşabilirsiniz.
- only: master ise sadece master branch koşacağını söylüyoruz.
- when: manuel ile de pipeline kendimiz tetikleyebilceğimiz yapıdır.
- docker login -u=$dhubusername -p=$dhubpassword değişken olarak tanımlıyoruz. Değişken değerleri,
Project Name-> Settings-> CI/CD-> Variables
Bizim senoryamızda pipeline otomatik olarak tüm stepler çalışacakdır.
- docker-build adımı job içeriği,
- docker push adımı job içeriği,
- docker dployment job içeriği,
Docker hub image’ları kontrol ettiğimizde,
Son olarak da uygulamızın başarılı şekilde çalışıp-çalışmadığını kontrol etmek için tarayıcıdan “192.168.1.28:8082” gittiğimizde.
Görüldüğü gibi başarılı şekilde deployment gerçekleşmiştir. Bundan sonra master’a atılan her commit’den sonra otomatik olarak pipeline’ımız koşacaktır. Code’u güncelleyip master’a bir commit atalım.
git add .git commit -m "Update"git push
Pipeline otomatik olarak tetiklendni ve tüm stage geçti.
Tekrar tarayıcıdan “192.168.1.28:8082” gittimizde,
Deploymet’ımızın başarılı şekilde geçtiğini görmekteyiz. Bundan sonra mastera her atılan committe pipeline otomatik olarak tetiklenecektir ama isterseniz manuel’de çevirebilirirsiniz.
Bu yazımızın da sonuna gelmiş bulunmaktayız. Araştırmalarım ve sektörde karşılaştığım senaryolar üzerine yazılarımı yazmaya devam edeceğim. Umarım faydalı bir yazı olmuştur. Yazımı okuduğunuz için teşekkürler.
Referenslar;