%40'a varan fırsatlar!
Kampanyaları İncele

CI/CD Nedir? Nasıl Çalışır ve Ne İşe Yarar?

📌 Öne Çıkan Noktalar

CI/CD ile alakalı bilmeniz gereken 5 kritik nokta;

  1. CI/CD (Continuous Integration / Continuous Delivery veya Deployment), yazılım geliştirme süreçlerinde kod değişikliklerinin otomatik olarak test edilmesini, hazırlanmasını ve dağıtılmasını sağlayan uygulamalar bütünüdür.
  2. Continuous Integration (CI), geliştiricilerin kod değişikliklerini ortak bir depoda birleştirmesini ve bu değişikliklerin otomatik testlerden geçirilmesini sağlar.
  3. Continuous Delivery ve Continuous Deployment, yazılımın dağıtıma hazır tutulmasını veya testlerden geçen sürümlerin otomatik olarak canlı ortama aktarılmasını amaçlar.
  4. CI/CD Pipeline, kod değişikliklerinin derleme, test ve dağıtım gibi aşamalardan geçtiği otomatik iş akışıdır.
  5. Jenkins, GitHub Actions ve GitLab CI/CD, yazılım geliştirme ekiplerinin entegrasyon, test ve dağıtım işlemlerini otomatikleştirmek için kullanabileceği yaygın araçlardır.

CI/CD (Continuous Integration / Continuous Delivery veya Continuous Deployment), yazılım geliştirme süreçlerinde kod değişikliklerinin otomatik olarak test edilmesini, hazırlanmasını ve dağıtılmasını sağlayan uygulamalar bütünüdür. Türkçede sürekli entegrasyon ve sürekli teslimat veya dağıtım olarak ifade edilir. CI/CD yaklaşımı, geleneksel yazılım geliştirme süreçlerini otomatikleştirerek yazılım güncellemelerinin daha hızlı, kontrollü ve tekrarlanabilir şekilde gerçekleştirilmesini amaçlar.

CI/CD Ne İşe Yarar?

CI/CD, yazılım ekiplerinin geliştirdiği yeni özellikleri, hata düzeltmelerini ve güvenlik güncellemelerini belirli kontrollerden geçirerek kullanıcılara ulaştırmasına yardımcı olur.

Mesela bir web uygulamasında yapılan değişikliklerin manuel olarak sunucuya yüklenmesi, dosya eksikliklerine veya sürüm uyuşmazlıklarına neden olabilir. CI/CD kullanıldığında kod değişiklikleri otomatik testlerden geçirilir ve belirlenen koşullar sağlandığında dağıtım süreci başlatılabilir.

Özellikle VDS server altyapısı üzerinde çalışan özel web uygulamalarında, otomatik dağıtım süreçleri güncellemelerin daha düzenli yönetilmesini sağlayabilir. CI/CD kullanımının temel amaçları şunlardır:

Yazılım güncellemelerini hızlandırmak

Tekrarlanan test ve dağıtım işlemlerini otomatikleştirmek.

Hataları erken tespit etmek

Kod değişikliklerini canlı ortama ulaşmadan önce kontrol etmek.

Manuel işlemleri azaltmak

Dosya yükleme, derleme ve test gibi işlemleri standartlaştırmak.

Ekip çalışmasını kolaylaştırmak

Farklı geliştiricilerin yaptığı değişiklikleri ortak bir süreçte değerlendirmek.

Dağıtım süreçlerini izlemek

Hangi sürümün ne zaman hazırlandığını ve dağıtıldığını takip etmek.

CI/CD Neden Önemlidir?

Yazılım projeleri büyüdükçe kod değişikliklerinin kontrol edilmesi zorlaşabilir. Özellikle birden fazla geliştiricinin aynı proje üzerinde çalışması, entegrasyon hataları ve sürüm uyuşmazlıkları oluşturabilir.

CI/CD, değişikliklerin küçük parçalar halinde ve sık aralıklarla test edilmesini destekleyerek bu risklerin azaltılmasına yardımcı olur.

Manuel Yazılım Dağıtımından Farkı

Manuel dağıtım

•Geliştirici, güncellenen dosyaları sunucuya kendisi aktarır.
•Uygulamanın çalışıp çalışmadığını elle kontrol eder.
•Bazı adımların unutulması veya yanlış dosyaların yüklenmesi mümkündür.

CI/CD yaklaşımı

✓Derleme, test ve dağıtım adımları önceden tanımlanmış iş akışlarıyla yürütülür.
✓Aynı işlemler her güncellemede benzer koşullarda tekrarlanır.
✓Süreç standart ve izlenebilir hale gelir.

CI ve CD Ne Anlama Gelir?

CI/CD iki temel kavramdan oluşur. CI, kod değişikliklerinin ortak projeye entegre edilmesine odaklanırken CD, test edilen yazılımın dağıtıma hazırlanması veya otomatik dağıtılmasıyla ilgilenir.

CIContinuous IntegrationSürekli Entegrasyon

Kod değişiklikleri ortak depoya aktarılır ve otomatik kontrollerden geçirilir.

CDContinuous DeliverySürekli Teslimat

Testleri geçen yazılım, canlıya alınmaya hazır durumda tutulur.

CDContinuous DeploymentSürekli Dağıtım

Testleri geçen değişiklikler manuel onay olmadan canlıya alınır.

CD ve Deployment Farkı

Continuous Integration (Sürekli Entegrasyon) Nedir?

Continuous Integration (CI), geliştiricilerin yaptıkları kod değişikliklerini düzenli olarak ortak kod deposuna aktarması ve bu değişikliklerin otomatik kontrollerden geçirilmesidir.

Örneğin bir geliştirici Git deposuna yeni kod gönderdiğinde CI sistemi otomatik olarak çalışabilir. Kod derlenir, testler gerçekleştirilir ve hata bulunursa geliştiriciye bildirim gönderilir.

Bu yaklaşım, farklı geliştiricilerin yaptığı değişikliklerin birbiriyle uyumlu olup olmadığının erken aşamada kontrol edilmesini sağlar.

Continuous Delivery (Sürekli Teslimat) Nedir?

Continuous Delivery, testlerden başarıyla geçen yazılımın canlı ortama dağıtılabilecek durumda tutulmasını amaçlar.

Bu yaklaşımda derleme ve test işlemleri otomatik gerçekleştirilebilir. Ancak üretim ortamına dağıtım için manuel onay gerekebilir. Örneğin yeni sürüm tüm testleri geçtikten sonra sistem yöneticisinin onayıyla canlıya alınabilir.

Continuous Deployment (Sürekli Dağıtım) Nedir?

Continuous Deployment, başarılı testlerden geçen yazılım değişikliklerinin ek bir manuel onay gerektirmeden üretim ortamına dağıtılmasıdır. Sürekli teslimattan temel farkı, canlıya alma aşamasının da otomatikleştirilmesidir.

Özellik Continuous Delivery Continuous Deployment
Otomatik test Var Var
Dağıtıma hazırlık Otomatik Otomatik
Canlıya alma Genellikle manuel onaylı Otomatik
Temel amaç Yazılımı yayına hazır tutmak Yazılımı otomatik yayımlamak

Bu ayrım, CI/CD süreçlerinin doğru anlaşılması açısından önemlidir.

CI/CD Pipeline Nedir ve Nasıl Çalışır?

CI/CD Pipeline, kod değişikliğinden yazılımın dağıtımına kadar gerçekleştirilen otomatik işlemlerin sıralı iş akışıdır. Pipeline içerisinde kod kontrolü, bağımlılıkların kurulması, derleme, test ve dağıtım gibi aşamalar bulunabilir.

CI/CD Pipeline nasıl Çalışır?

Kod Değişikliklerinin Git Deposuna Gönderilmesi

CI/CD süreci genellikle geliştiricinin kod değişikliklerini GitHub veya GitLab gibi bir kaynak kod deposuna göndermesiyle başlar.

Örnek olarak git push işlemi, önceden tanımlanan bir pipeline’ı tetikleyebilir. Böylece yeni kodun kontrol edilmesi için manuel işlem yapılması gerekmez.

Build ve Otomatik Test Aşamaları

Build aşamasında yazılımın çalışması için gerekli dosyalar hazırlanır, bağımlılıklar yüklenir ve gerekiyorsa kod derlenir. Ardından otomatik testler çalıştırılır. Bu testler birim testlerini, entegrasyon testlerini veya güvenlik kontrollerini içerebilir.

Test başarısız olursa

Testlerden biri başarısız olursa pipeline durdurulabilir. Böylece hatalı değişikliklerin sonraki aşamalara geçmesi engellenebilir.

Deployment (Dağıtım) ve Canlıya Alma

Deployment, hazırlanan yazılım sürümünün hedef çalışma ortamına aktarılmasıdır. Dağıtım geliştirme, test veya üretim ortamına yapılabilir. Kullanılan CI/CD modeline göre üretim ortamına geçiş otomatik gerçekleştirilebilir ya da manuel onay gerektirebilir.

CI/CD Araçları Nelerdir?

CI/CD süreçlerini otomatikleştirmek için farklı araçlar kullanılabilir. Bu araçlar kod depolarıyla entegre çalışarak test ve dağıtım iş akışlarının yönetilmesini sağlar.

JenkinsAçık kaynak

Derleme, test ve dağıtım işlemlerini otomatikleştiren açık kaynaklı otomasyon sunucusu.

GitHub ActionsYAML iş akışları

GitHub depolarındaki olaylara bağlı olarak otomatik iş akışları oluşturur.

GitLab CI/CD.gitlab-ci.yml

GitLab projelerinde derleme, test ve dağıtım süreçlerini yönetir.

Jenkins

Jenkins, açık kaynaklı bir otomasyon sunucusudur. Yazılım projelerinde derleme, test ve dağıtım işlemlerini otomatikleştirmek için kullanılır. Eklenti desteği sayesinde farklı geliştirme araçlarıyla entegre edilebilir. Ancak kurulumu, güncellenmesi ve yönetimi teknik bakım gerektirebilir.

GitHub Actions

GitHub Actions, GitHub depolarındaki olaylara bağlı olarak otomatik iş akışları oluşturmayı sağlar. Örnek olarak bir pull request açıldığında testlerin çalıştırılması veya ana dala kod gönderildiğinde uygulamanın dağıtılması için kullanılabilir. İş akışları genellikle YAML dosyalarıyla tanımlanır.

GitLab CI/CD

GitLab CI/CD, GitLab projeleri içerisinde derleme, test ve dağıtım süreçlerini yönetmek için kullanılan otomasyon sistemidir.

Pipeline görevleri .gitlab-ci.yml dosyası üzerinden tanımlanabilir. İşlemler GitLab Runner bileşenleri aracılığıyla çalıştırılır.

Araç seçimi

Hangi aracın seçileceği; mevcut kod deposuna, ekip deneyimine, altyapı ihtiyaçlarına ve bakım kapasitesine göre değerlendirilmelidir.

CI/CD Pipeline Nasıl Kurulur?

CI/CD kurulumu için öncelikle kaynak kodun bir sürüm kontrol sisteminde tutulması ve otomatikleştirilecek işlemlerin belirlenmesi gerekir. Ardından seçilen CI/CD aracı üzerinden derleme, test ve dağıtım adımları tanımlanır.

GitHub Actions ile Basit CI/CD Örneği

GitHub Actions kullanılarak bir Node.js projesinin otomatik test edilmesi sağlanabilir. Bunun için proje deposunda .github/workflows/ci.yml dosyası oluşturulabilir.

.github/workflows/ci.yml

name: Node.js CI

on:
push:
branches: [main]
pull_request:
branches: [main]

jobs:
test:
runs-on: ubuntu-latest

steps:
– uses: actions/checkout@v4

– uses: actions/setup-node@v4
with:
node-version: ’22’
cache: ‘npm’

– name: Install dependencies
run: npm ci

– name: Run tests
run: npm test

Bu örnekte ana dala kod gönderildiğinde veya pull request açıldığında GitHub Actions otomatik olarak çalışır. Sistem Node.js ortamını hazırlar, bağımlılıkları yükler ve test komutunu çalıştırır.

Bilmekte fayda var

İş akışının başarılı olması için projede uygun package.json, kilit dosyası ve çalışan bir test komutu bulunmalıdır. Bu örnek yalnızca CI aşamasını gerçekleştirir. Canlı ortama otomatik dağıtım için ayrıca bir deployment görevi tanımlanmalıdır.

CI/CD ile Sunucuya Otomatik Dağıtım

CI/CD süreçleri testlerden geçen uygulamaların uzak sunuculara dağıtılmasında da kullanılabilir. Örnek olarak VPS server üzerinde çalışan bir Node.js uygulaması için şu iş akışı oluşturulabilir:

CI/CD Sunucuya Otomatik Dağıtım
  • Geliştirici yeni kodu Git deposuna gönderir.
  • CI sistemi bağımlılıkları yükler ve testleri çalıştırır.
  • Başarılı sürüm için dağıtım paketi hazırlanır.
  • Paket güvenli bağlantı üzerinden hedef sunucuya aktarılır.
  • Uygulama kontrollü şekilde yeniden başlatılır ve sağlık kontrolleri yapılır.

Güvenli dağıtım için

Bu işlemlerin güvenli şekilde yürütülebilmesi için SSH anahtarlarının korunması, dağıtım yetkilerinin sınırlandırılması ve gerekli durumlarda manuel onay mekanizmalarının kullanılması önemlidir.

CI/CD Kullanmanın Avantajları Nelerdir?

CI/CD, yazılım geliştirme ve dağıtım süreçlerinin standartlaştırılmasına yardımcı olur. Özellikle sık güncelleme yapılan projelerde tekrarlanan işlemlerin otomatikleştirilmesi önemli kolaylıklar sağlayabilir. Başlıca avantajları şunlardır:

✓Daha hızlı güncelleme: Yazılım değişikliklerinin test ve dağıtım süreçleri hızlandırılabilir.
✓Erken hata tespiti: Kod değişikliklerinden kaynaklanan bazı sorunlar canlı ortama ulaşmadan belirlenebilir.
✓Tutarlı dağıtım: Her sürümde aynı işlemlerin uygulanması sağlanabilir.
✓Kolay takip: Test sonuçları, dağıtım geçmişi ve başarısız işlemler kayıt altına alınabilir.
✓Ekip verimliliği: Geliştiricilerin tekrarlanan manuel işlemlere ayırdığı zaman azaltılabilir.

Not

CI/CD kullanılması, yazılımın hatasız olacağını veya dağıtımların hiçbir zaman kesintiye neden olmayacağını garanti etmez. Otomasyonun güvenilirliği, test kapsamına ve yapılandırmanın doğruluğuna bağlıdır.

CI/CD ile DevOps Arasındaki Fark Nedir?

CI/CD ve DevOps birbiriyle ilişkili kavramlar olsa da aynı anlama gelmez.

DevOps

•Geliştirme ve operasyon ekipleri arasındaki iş birliğini, süreçleri ve çalışma kültürünü geliştiren geniş bir yaklaşımdır.
•Altyapı otomasyonu, izleme, güvenlik, ekip iletişimi ve operasyonel süreçleri de kapsayabilir.

CI/CD

•DevOps içinde kullanılan entegrasyon, test ve dağıtım uygulamalarını ifade eder.
•Kod değişikliklerinin güvenilir biçimde hazırlanması ve dağıtılmasına odaklanır.

Dolayısıyla CI/CD, DevOps uygulamalarını destekleyen önemli yöntemlerden biridir.

CI/CD Süreçlerinde Güvenlik ve Dikkat Edilmesi Gerekenler

CI/CD sistemleri kaynak kod depolarına, sunuculara ve dağıtım ortamlarına erişebildiği için güvenlik açısından dikkatli yapılandırılmalıdır.

Ciddi riskler!

Otomasyon sistemlerine gereğinden fazla yetki verilmesi, erişim bilgilerinin açığa çıkması veya güvenilmeyen kodların çalıştırılması ciddi riskler oluşturabilir.

Erişim Anahtarları ve Gizli Bilgilerin Korunması

API anahtarları, SSH özel anahtarları ve erişim belirteçleri doğrudan kaynak kod içerisine yazılmamalıdır. Bu bilgiler, kullanılan CI/CD platformunun güvenli secret yönetimi özellikleri üzerinden saklanmalıdır.

✓API anahtarlarını ve erişim belirteçlerini secret yönetimiyle saklayın.
✓Dağıtım hesaplarına yalnızca ihtiyaç duydukları yetkileri verin.
✓Kullanılan üçüncü taraf bileşenlerin güvenilirliğini değerlendirin.

Hatalı Dağıtımlarda Rollback ve Yedekleme

Rollback, sorunlu bir yazılım sürümünden önceki kararlı sürüme geri dönme işlemidir. CI/CD süreçlerinde geri dönüş planının önceden hazırlanması, hatalı dağıtımların etkisini azaltabilir.

Yalnızca dosyaları geri almak yetmeyebilir!

Uygulama dosyalarını önceki sürüme döndürmek her zaman yeterli değildir. Veritabanı şeması değişiklikleri ve kullanıcı verileri de dikkate alınmalıdır. Özellikle kritik uygulamalarda dağıtım öncesi yedekleme, sürüm kontrolü ve sağlık kontrolleri birlikte planlanmalıdır.

Sıkça Sorulan Sorular

CI/CD süreçlerinde Jenkins, GitHub Actions, GitLab CI/CD ve Azure Pipelines gibi araçlar kullanılabilir. Araç seçimi, projenin geliştirme ortamına ve otomasyon ihtiyaçlarına göre yapılmalıdır.

Hayır. CI/CD küçük yazılım projelerinde de kullanılabilir. Tek geliştiricili projelerde bile otomatik testlerin çalıştırılması ve dağıtım işlemlerinin standartlaştırılması fayda sağlayabilir.

Git, kaynak kod değişikliklerini takip etmek için kullanılan bir sürüm kontrol sistemidir. CI/CD ise bu değişikliklerin otomatik olarak test edilmesi ve dağıtılmasıyla ilgili süreçleri kapsar. Git, CI/CD iş akışlarını tetiklemek için kullanılabilir.

CI/CD işlemlerinin çalıştırılması için bir yürütme ortamına ihtiyaç vardır. Ancak bu ortamın kullanıcı tarafından yönetilen fiziksel veya sanal bir sunucu olması zorunlu değildir. GitHub Actions gibi platformların sağladığı barındırılan çalışma ortamları da kullanılabilir.

Yorumlarınız bizim için değerli

Yorum yapın

Turkishost Blog
Logo