CI/CD Boru Xətti (Pipeline) Necə Qurulur? Yeni Başlayanlar üçün Addım-addım Bələdçi
Təsəvvür edin ki, böyük bir proqram təminatı layihəsi üzərində işləyirsiniz. Komandanızdakı hər bir tərtibatçı (developer) hər gün onlarla yeni kod sətri yazır və bu kodları əsas sistemə birləşdirir. Hər dəfə yeni funksiya əlavə olunanda kodun əllə test edilməsi, serverə yüklənməsi və konfiqurasiya edilməsi saatlarla vaxt aparır. Üstəlik, insan amili səbəbindən kiçik bir diqqətsizlik bütün sistemin çökməsinə (downtime) səbəb ola bilər.
Budur, müasir proqram təminatı dünyasının xilaskarı: CI/CD (Continuous Integration / Continuous Deployment), yəni Davamlı İnteqrasiya və Davamlı Yerləşdirmə. CI/CD boru xətti (pipeline) kodun yazıldığı andan etibarən onun avtomatik test edilməsini, paketlənməsini və canlı serverə yerləşdirilməsini təmin edən texnoloji konveyerdir.
Bu bələdçidə biz CI/CD-nin nə olduğunu, onun iş prinsiplərini və ən əsası, sıfırdan öz avtomatlaşdırılmış boru xəttinizi necə quracağınızı addım-addım öyrənəcəyik.
Sıfırdan Sayt Hazırlamaq Bələdçisi: Kod Yazmadan Professional Veb Sayt Necə Qurulur?
Kod yazmadan professional veb sayt hazırlamaq istəyirsiniz? WordPress, Webflow və Shopify ilə addım-addım sayt qurmaq bələdçisi və ən yaxşı platformalar.
Oxumağa davam et→CI/CD Nədir? Continuous Integration və Continuous Deployment Anlayışları
CI/CD tək bir alət deyil, proqram təminatının hazırlanması prosesini sürətləndirən və keyfiyyətini artıran bir metodologiyadır. Gəlin bu anlayışları iki hissəyə bölərək təhlil edək.
Continuous Integration (CI) - Davamlı İnteqrasiya
Continuous Integration, tərtibatçıların tez-tez (gündə bir neçə dəfə) öz kod dəyişikliklərini mərkəzi repozitoriyaya (məsələn, GitHub və ya GitLab) birləşdirməsidir. Hər bir birləşmə (merge) zamanı avtomatik olaraq aşağıdakı proseslər baş verir:
- Kodun yoxlanılması (Linting): Kodun yazılış standartlarına uyğun olub-olmaması yoxlanılır.
- Avtomatik Qurulma (Build): Kodun işlək bir tətbiq halına gətirilməsi təmin edilir.
- Avtomatlaşdırılmış Testlər (Automated Testing): Unit və inteqrasiya testləri işə salınır ki, yeni kod köhnə funksionallığı pozmasın.
Continuous Delivery və Continuous Deployment (CD) - Davamlı Çatdırılma və Yerləşdirmə
CI mərhələsi uğurla başa çatdıqdan sonra CD mərhələsi başlayır. Burada iki fərqli yanaşma mövcuddur:
- Continuous Delivery (Davamlı Çatdırılma): Kod avtomatik olaraq test mühitinə (staging) yerləşdirilir, lakin canlı serverə (production) keçid üçün insan təsdiqi (manual approval) tələb olunur.
- Continuous Deployment (Davamlı Yerləşdirmə): Heç bir insan müdaxiləsi olmadan, bütün testlərdən uğurla keçən hər bir kod dəyişikliyi birbaşa canlı serverə yüklənir.
"Avtomatlaşdırılmamış hər bir proses gələcəkdə mütləq xəta mənbəyinə çevriləcəkdir. CI/CD insan səhvlərini sıfıra endirməyin yeganə elmi yoludur."
CI/CD Boru Xəttinin (Pipeline) Əsas Mərhələləri
Uğurlu bir CI/CD boru xətti dörd əsas mərhələdən ibarətdir. Hər bir mərhələ özündən əvvəlkinin uğurlu nəticəsindən asılıdır.
[ Kodun Yazılması ] ──> [ Build (Qurulma) ] ──> [ Test Mərhələsi ] ──> [ Deploy (Yerləşdirmə) ]
1. Mənbə (Source) Mərhələsi
Tərtibatçı kodu yazır və Git vasitəsilə repozitoriyaya göndərir (push edir). Bu hərəkət (trigger) CI/CD boru xəttini avtomatik olaraq aktivləşdirir.
2. Qurulma (Build) Mərhələsi
Bu mərhələdə tətbiqin işləməsi üçün lazım olan bütün asılılıqlar (dependencies) yüklənir. Məsələn, bir Node.js layihəsidirsə npm install icra olunur, Docker layihəsidirsə Docker imici (image) yaradılır.
3. Test Mərhələsi
Yazılmış kodun keyfiyyətini və təhlükəsizliyini təmin etmək üçün müxtəlif testlər icra olunur. Əgər testlərin hər hansı biri uğursuz olarsa, boru xətti dayanır və tərtibatçıya dərhal bildiriş göndərilir.
4. Yerləşdirmə (Deploy) Mərhələsi
Hər şey qaydasındadırsa, tətbiq avtomatik olaraq bulud serverlərinə (AWS, Azure, Google Cloud və ya şəxsi VPS) yerləşdirilir və istifadəçilərin ixtiyarına verilir.
Ən Populyar CI/CD Alətlərinin Müqayisəsi
Bazar mühitində onlarla fərqli CI/CD aləti mövcuddur. Layihənizin miqyasına və infrastrukturuna uyğun olaraq düzgün aləti seçmək vacibdir.
| Alət | Üstünlükləri | Çatışmazlıqları | Ən Yaxşı İstifadə Ssenarisi |
|---|---|---|---|
| GitHub Actions | GitHub ilə daxili inteqrasiya, asan quraşdırma, geniş şablon kitabxanası | Mürəkkəb lokal test imkanlarının zəif olması | GitHub istifadə edən kiçik və orta layihələr |
| GitLab CI | Çox güclü daxili xüsusiyyətlər, Kubernetes ilə mükəmməl inteqrasiya | Öyrənmə əyrisi bir az dikdir | Enterprise səviyyəli və GitLab istifadə edən komandalar |
| Jenkins | Tamamilə pulsuz, açıq mənbəli, minlərlə plagin dəstəyi | Server idarəetməsi və konfiqurasiya çətinliyi | Şəxsi serverlərdə tam nəzarət istəyən böyük şirkətlər |
| CircleCI | Çox sürətli icra müddəti, bulud əsaslı resursların optimallaşdırılması | Qiyməti böyük komandalar üçün yüksək ola bilər | Sürətli böyümək istəyən startaplar |
Praktiki Tətbiq: GitHub Actions ilə Addım-addım CI/CD Qurulması
Gəlin nəzəriyyəni kənara qoyub, real bir Node.js layihəsi üçün GitHub Actions vasitəsilə CI/CD boru xətti quraq. Bu layihədə kod hər dəfə main qoluna (branch) göndərildikdə avtomatik test ediləcək və Docker imici yaradılacaq.
Addım 1: Layihə Strukturunun Hazırlanması
Layihənizin kök qovluğunda .github/workflows/ adlı qovluq yaradın. Bu qovluğun daxilində ci-cd.yml adlı bir fayl yaradın. GitHub bu faylı avtomatik olaraq tanıyacaq və icra edəcək.
Addım 2: YAML Konfiqurasiya Faylının Yazılması
Aşağıdakı kodu ci-cd.yml faylına əlavə edin. Hər bir sətir şərh edilərək izah olunmuşdur:
# Boru xəttinin adı
name: Node.js CI/CD Pipeline
# Hansı hadisə baş verdikdə işə düşəcəyini təyin edirik
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
# İcra olunacaq işlər (jobs)
jobs:
# 1-ci İş: Test Mərhələsi
test-and-build:
runs-on: ubuntu-latest # İşin icra olunacağı virtual mühit
steps:
# Repozitoriyadakı kodu virtual mühitə yükləyirik
- name: Kodu Yüklə (Checkout)
uses: actions/checkout@v3
# Node.js mühitini quraşdırırıq
- name: Node.js Quraşdır
uses: actions/setup-node@v3
with:
node-version: '18'
cache: 'npm'
# Asılılıqları yükləyirik
- name: Asılılıqları Yüklə (Install Dependencies)
run: npm ci
# Testləri işə salırıq
- name: Testləri İcra Et
run: npm test
# 2-ci İş: Docker İmicinin Yaradılması (Yalnız testlər uğurlu olduqda işləyir)
build-docker-image:
needs: test-and-build # Bu işin başlaması üçün test-and-build uğurla bitməlidir
runs-on: ubuntu-latest
steps:
- name: Kodu Yüklə (Checkout)
uses: actions/checkout@v3
# Docker Hub-a daxil olmaq üçün konfiqurasiya
- name: Docker Hub-a Giriş Et
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
# Docker imicini qururuq və Docker Hub-a göndəririk
- name: Docker İmicini Qur və Göndər
uses: docker/build-push-action@v4
with:
context: .
push: true
tags: ${{ secrets.DOCKERHUB_USERNAME }}/my-node-app:latest
Addım 3: GitHub Secrets-in Tənzimlənməsi
Kodumuzun təhlükəsizliyini qorumaq üçün şifrələri və tokenləri birbaşa koda yazmırıq. Bunun üçün:
- GitHub repozitoriyanıza daxil olun.
- Settings -> Secrets and variables -> Actions bölməsinə keçin.
- New repository secret düyməsini sıxaraq
DOCKERHUB_USERNAMEvəDOCKERHUB_TOKENdəyərlərini əlavə edin.
Artıq hər dəfə kodunuzu main qoluna göndərdikdə GitHub Actions bu boru xəttini işə salacaq, testləri keçirəcək və uğurlu olarsa, yeni Docker imicinizi Docker Hub-a yükləyəcək.
CI/CD-nin Effektivliyini Ölçən Metriklər
CI/CD boru xəttini qurduqdan sonra onun nə dərəcədə səmərəli işlədiyini izləmək lazımdır. DevOps dünyasında bunun üçün xüsusi DORA (DevOps Research and Assessment) metriklərindən istifadə olunur:
- Deployment Frequency (Yerləşdirmə Tezliyi): Təşkilatınızın koda edilən dəyişiklikləri canlı serverə nə qədər tez-tez yerləşdirdiyini ölçür.
- Lead Time for Changes (Dəyişikliklərin İcra Müddəti): Kodun yazılmağa başladığı andan canlı serverə getdiyi ana qədər keçən vaxt.
- Mean Time to Recovery (MTTR - Bərpa üçün Orta Vaxt): Canlı serverdə hər hansı bir xəta baş verdikdə, sistemin yenidən normal fəaliyyətə qayıtması üçün lazım olan orta müddət.
- Change Failure Rate (Dəyişikliklərin Uğursuzluq Nisbəti): Yerləşdirilən dəyişikliklərin neçə faizinin xəta ilə nəticələndiyini göstərən nisbət.
Boru xəttinin səmərəliliyini hesablamaq üçün sadə bir düsturdan istifadə edə bilərik:
Boru Xəttinin Uğur Nisbəti = (Uğurlu İcra Sayı / Ümumi İcra Sayı) * 100
Əgər bu nisbət 95%-dən aşağıdırsa, deməli testlərinizdə və ya infrastrukturunuzda ciddi problemlər var və optimallaşdırmaya ehtiyac duyulur.
CI/CD Prosesində Ən Çox Buraxılan Səhvlər və Onların Həlli
CI/CD boru xətlərini qurarkən mühəndislərin tez-tez qarşılaşdığı bəzi kritik səhvlər mövcuddur:
- Yavaş Testlər: Əgər testlərinizin icrası 30 dəqiqədən çox çəkirsə, tərtibatçılar gözləməkdən yorulacaq və CI/CD-dən yan keçməyə çalışacaqlar. Həlli: Testləri paralel olaraq işə salın və keşləmə (caching) mexanizmlərindən istifadə edin.
- Şifrələrin (Secrets) Koda Yazılması: API açarlarını və ya verilənlər bazası şifrələrini birbaşa Git-ə yükləmək böyük təhlükəsizlik boşluğudur. Həlli: Həmişə GitHub Secrets, HashiCorp Vault və ya AWS Secrets Manager kimi alətlərdən istifadə edin.
- Hər Şeyi Avtomatlaşdırmağa Çalışmaq: İlk gündən hər bir xırda detalı avtomatlaşdırmaq layihəni mürəkkəbləşdirə bilər. Həlli: Əvvəlcə ən çox vaxt aparan və təkrarlanan işlərdən (məsələn, test və build) başlayın, daha sonra mərhələli şəkildə genişləndirin.
Nəticə və Gələcək Addımlar
CI/CD boru xətti müasir proqram təminatı inkişafının onurğa sütunudur. O, komandalara daha sürətli, daha təhlükəsiz və daha keyfiyyətli məhsullar ortaya qoymağa imkan verir. Bu bələdçidə öyrəndiyiniz addımları tətbiq edərək, siz də öz layihələrinizdə əl işini minimuma endirə və DevOps mədəniyyətinə ilk addımınızı ata bilərsiniz.
Növbəti addım olaraq, qurduğunuz CI/CD boru xəttinə Kubernetes yerləşdirmələrini (GitOps yanaşması ilə) əlavə etməyi və ya Terraform vasitəsilə infrastrukturunuzu kod olaraq (IaC) idarə etməyi sınaqdan keçirə bilərsiniz.
Jamil Sultanli
Rəqəmsal marketinq, SEO və startuplar üzrə məsləhətçi. Datanın tətbiqi ilə işlərin miqyaslanması (Scaling) və inkişaf (Growth) strategiyalarının idarə olunması haqqında yazır.