Build Pipeline (qurma boru kəməri) — kodun commit anından yerləşdirməyə hazır artefakta qədər keçdiyi avtomatlaşdırılmış mərhələlər ardıcıllığıdır. Pipeline kompilasiya, testlərin icrası, statik analiz və buraxılış paketinin hazırlanmasını əhatə edir. Google Cloud DORA, 2025 məlumatlarına görə, yaxşı qurulmuş pipeline-a malik komandalar avtomatlaşdırması olmayan komandalarla müqayisədə 440 dəfə daha sürətli dəyişiklik çatdırılmasına nail olurlar.
Əsas məqamlar
Build Pipeline (qurma boru kəməri) — hər kod dəyişikliyində avtomatik icra olunan rəsmiləşdirilmiş addımlar ardıcıllığıdır. Hər addım keyfiyyətin müəyyən aspektini yoxlayır: kompilyasiya oluna bilmə, testlərin düzgünlüyü, zəifliklərin olmaması, kod stilinə uyğunluq. Əgər hər hansı addım xəta ilə bitərsə, pipeline dayanır.
Pipeline konsepsiyası istehsal xəttindən gəlir — fabrikdə olduğu kimi, hər stansiya məhsula dəyər əlavə edir. Proqram təminatı inkişafında hər mərhələ kodun buraxılışa hazır olduğuna əminlik əlavə edir. Müasir pipeline-lar kod kimi müəyyən edilir (Pipeline as Code) və layihə ilə birlikdə Git repozitoriyasında saxlanılır.
Continuous Delivery Foundation, 2025-ə görə, yetkin build pipeline commit-dən buraxılışa qədər vaxtı həftələrdən dəqiqələrə endirir. Buna tam avtomatlaşdırma və müstəqil mərhələlərin paralel icrası ilə nail olunur.
Veb interfeysi vasitəsilə konfiqurasiya əvəzinə, müasir pipeline YAML və ya Groovy fayllarında təsvir olunur. Jenkinsfile, `.gitlab-ci.yml`, `.github/workflows/build.yml` — Pipeline as Code nümunələridir. Üstünlükləri: versiyalaşdırma, code review, təkrarlana bilmə.
Jenkins-də iki sintaksis mövcuddur. Deklarativ — daha sadə, aydın stages/steps strukturu ilə. Skript — daha çevik, Groovy əsaslı. Əksər layihələr üçün daha oxunaqlı və proqnozlaşdırıla bilən olduğu üçün deklarativ yanaşma tövsiyə olunur.
Mobil tətbiq üçün tipik build pipeline bir neçə əsas mərhələni əhatə edir. Hər mərhələ öz funksiyasını yerinə yetirir və potensial problemləri erkən mərhələdə süzgəcdən keçirir.
Pipeline repozitoriyanın klonlanması ilə başlayır. Sonra asılılıqlar quraşdırılır: Gradle/Maven paketləri, CocoaPods, SPM (Swift Package Manager), npm paketləri. Bu mərhələdə keşdən istifadə sonrakı qurmaları 50-70% sürətləndirir.
Kompilasiyadan əvvəl kod keyfiyyətinə nəzarət alətləri işə salınır: Kotlin üçün Detekt və ya ktlint, Swift üçün SwiftLint, JavaScript üçün ESLint. Onlar kod stilinə uyğunluğu yoxlayır və potensial səhvləri kod analizi səviyyəsində tapır.
Kod ikili formada kompilyasiya olunur, paralel olaraq vahid testləri işə salınır. Android üçün bu `./gradlew testDebugUnitTest`, iOS üçün — `xcodebuild test -scheme App -destination 'platform=iOS Simulator'`. Testlərin uğursuzluğu dərhal pipeline-i dayandırır.
name: Mobile Build Pipeline
on: [push, pull_request]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: ./gradlew detekt
unit-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: ./gradlew testDebugUnitTest
- run: ./gradlew jacocoTestReport
build-release:
needs: [lint, unit-tests]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: ./gradlew assembleRelease
- uses: actions/upload-artifact@v4
with:
name: release-apk
path: app/build/outputs/apk/release/app-release.apk
Uğurlu kompilasiyadan sonra tətbiqin işə salınmasını tələb edən testlər yerinə yetirilir: Android üçün Espresso, iOS üçün XCTest/XCUITest, React Native üçün Detox. Bu mərhələdə artefakt simulyatorda və ya ferma xidmətləri (Firebase Test Lab, BrowserStack, Sauce Labs) vasitəsilə real cihazda yerləşdirilir.
Pipeline-in düzgün konfiqurasiyası bütün CI/CD prosesinin səmərəliliyini müəyyən edir. Konfiqurasiyaya daxildir: trigger-lərin seçimi, paralel və ardıcıl mərhələlərin müəyyən edilməsi, parametrləşdirmə və xarici xidmətlərlə inteqrasiya.
Əsas trigger-lər: repozitoriyaya push, pull request (xüsusilə avtomatik yoxlamalarla code review üçün), Git teqinin yaradılması (buraxılış qurması üçün), cədvəl (nightly build). Pull request trigger — komanda işi üçün ən praktikdir, çünki kodu birləşdirməzdən əvvəl problemləri aşkarlayır.
Müstəqil mərhələlər (linting, müxtəlif OS versiyalarında test) sürətləndirmək üçün paralel icra olunmalıdır. Asılı olanlar — ardıcıl. Müasir CI sistemləri avtomatik idarə edir paralel tapşırıqları, onları mövcud agentlər arasında bölüşdürərək.
Uzun pipeline inkişaf dövrünü ləngidir və komandanın motivasiyasını azaldır. Qurma vaxtının optimallaşdırılması — build pipeline ilə işləyərkən DevOps mühəndisinin əsas vəzifələrindən biridir.
Gradle Build Cache əvvəlki kompilasiyaların nəticələrini saxlayır. Modulun mənbə kodu dəyişməyibsə, təkrar kompilyasiya olunmur. Eyni şəkildə Swift və Kotlin-də inkremental kompilasiya işləyir. Keşin ölçüsü gigabaytlara çata bilər, lakin vaxta qənaət 30% ilə 70% arasındadır.
Vahid testləri bir neçə agentdə eyni vaxtda işə salına bilər, test siniflərini bölüşdürərək. Sharding — testlərin qruplara (shards) bölünməsi texnikası. GitHub Actions `strategy.matrix`-i dəstəkləyir, Jenkins — Parallel Test Executor, Gradle — `--parallel --max-workers`.
Hər əlavə mərhələ vaxt əlavə edir. Pipeline-i mütəmadi analiz edin: hansı mərhələləri birləşdirmək olar? Məsələn, linting kompilasiyadan əvvəl deyil, onunla paralel işə salına bilər. İnteqrasiya testləri — yalnız pull request üçün, hər commit üçün deyil.
pipeline {
agent any
options {
timestamps()
timeout(time: 30, unit: 'MINUTES')
}
stages {
stage('Parallel Checks') {
parallel {
stage('Lint') {
steps { sh './gradlew detekt' }
}
stage('Unit Tests') {
steps { sh './gradlew test' }
}
}
}
stage('Build') {
steps { sh './gradlew assembleRelease' }
}
}
}
Build pipeline proqram təminatı təchizat zəncirinin kritik elementidir və onun təhlükəsizliyi nəzərdən qaçırılmamalıdır. Pipeline-in kompromizasiyası buraxılış artefaktına zərərli kodun daxil edilməsinə gətirib çıxara bilər ki, bu da tətbiqin bütün istifadəçilərinə təsir edəcək.
Tanınmış hücumlar: SolarWinds (2020), Codecov (2021), 3CX (2023) — hamısı CI/CD pipeline-larında zəifliklərdən istifadə edirdi. Ümumi vektor — təcavüzkar qurma serverinin etimadnamələrinə giriş əldə edir və qurma mərhələsində kodu dəyişdirir. Nəticə — qanuni sertifikatla imzalanmış zərərli buraxılış.
Heç vaxt saxlamayın imza açarlarını, API tokenlərini və şifrələri repozitoriyada və ya CI sisteminin açıq formada mühit dəyişənlərində. CI sisteminin sirlərindən (GitHub Secrets, GitLab CI Variables), HashiCorp Vault, AWS Secrets Manager istifadə edin. Sirlərə girişi minimuma endirin — hər pipeline yalnız öz konkret addımları üçün lazım olan açarları almalıdır.
Pipeline-dan çıxan hər artefakt kriptoqrafik olaraq imzalanmalı və attestasiya — mənşə haqqında şəhadətnamə (provenance) ehtiva etməlidir. Alətlər: SLSA framework, in-toto attestation, konteynerlərin imzalanması üçün cosign. İmzanın yoxlanılması hər hansı mühitə yerləşdirmədən əvvəl yerinə yetirilməlidir.
name: Secure Build Pipeline
on: [push]
jobs:
security-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Scan dependencies
run: ./gradlew dependencyCheckAnalyze
- name: SAST scan
run: ./gradlew detekt
sign-attest:
needs: security-scan
runs-on: ubuntu-latest
steps:
- run: ./gradlew assembleRelease
- name: Sign APK
run: jarsigner -keystore ${{ secrets.KEYSTORE }} \
app-release.apk ${{ secrets.KEY_ALIAS }}
- name: Generate provenance
uses: actions/attest-build-provenance@v1
Build pipeline — davamlı monitorinq tələb edən mürəkkəb bir sistemdir. Metriklər olmadan pipeline-in yavaşlayıb-yavaşlamadığını və hansı mərhələnin darboğaz halına gəldiyini müəyyən etmək mümkün deyil.
İzləyin: keçid vaxtı (total pipeline duration), hər mərhələnin vaxtı, qəza tezliyi (build failure rate), növbədə gözləmə vaxtı (queue time). Böyük komanda (>20 tərtibatçı) üçün həftə/ay üçün aqreqasiya edilmiş statistika ilə Grafana və ya Datadog-da dashboard qurmaq tövsiyə olunur.
Hər pipeline qəzası reaksiya tələb edir. Mesencerlərdə (Slack, Telegram, Discord) xəta loquna keçid və commit müəllifinin göstərilməsi ilə bildirişlər qurun. Kritik qəzalar üçün — PagerDuty və ya Opsgenie eskalasiya ilə.
Act (GitHub Actions üçün) və ya Jenkins Pipeline Unit Test kimi alətlər pipeline-i commit etmədən lokal olaraq işə salmağa imkan verir. Bu, xüsusilə yeni mərhələlər əlavə edərkən və ya konfiqurasiyanı dəyişdirərkən pipeline-ların inkişafını və sazlanmasını sürətləndirir.
Tez-tez verilən suallar
Build pipeline CI/CD pipeline-in bir hissəsidir, kompilasiya və artefaktın hazırlanmasına cavabdehdir. CI/CD pipeline daha genişdir: o, yerləşdirmə, buraxılışdan sonra monitorinq və infrastruktur yoxlamalarını əhatə edir.
Hər repotoriyaya push zamanı. Pull request üçün — birləşdirmədən əvvəl mütləq. Nightly build — hər commit üçün məcburi olmayan uzun testlər (e2e, performance) üçün.
Yeni layihələr üçün — YAML (GitHub Actions, GitLab CI, Bitrise). Oxunaqlı və sadədir. Groovy (Jenkins) daha güclüdür, lakin dəstəkləmək daha çətindir. Seçim istifadə olunan CI sistemindən asılıdır.
Əsas üsullar: asılılıqların keşləşdirilməsi, müstəqil mərhələlərin paralel icrası, testlərin shard edilməsi, hər commit üçün pipeline-dan uzun testlərin çıxarılması, güclü qurma agentlərindən istifadə.
Loqları analiz edin: hansı test uğursuz oldu və niyə. Test flaky-dirsə, retry mexanizmi əlavə edin. Əgər real səhvdirsə, testi söndürmədən kodu düzəldin. Testləri söndürmək — son çarədir.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun