Jamil Sultanli.
← Ana Səhifəyə Qayıt

CI/CD Boru Xətti (Pipeline) Necə Qurulur? Yeni Başlayanlar üçün Addım-addım Bələdçi

·12 dəqiqə

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.

BUNLARI DA OXUYUN

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:

  1. Kodun yoxlanılması (Linting): Kodun yazılış standartlarına uyğun olub-olmaması yoxlanılır.
  2. Avtomatik Qurulma (Build): Kodun işlək bir tətbiq halına gətirilməsi təmin edilir.
  3. 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 ActionsGitHub 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 dikdirEnterprise səviyyəli və GitLab istifadə edən komandalar
JenkinsTamamilə pulsuz, açıq mənbəli, minlərlə plagin dəstəyiServer 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ərSü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:

  1. GitHub repozitoriyanıza daxil olun.
  2. Settings -> Secrets and variables -> Actions bölməsinə keçin.
  3. New repository secret düyməsini sıxaraq DOCKERHUB_USERNAMEDOCKERHUB_TOKEN də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.

JS
YAZAR

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.

Bunları da oxuyun