Bosh sahifa Wiki CI

CI

CI (Continuous Integration) — dasturchilar o‘zgarishlarini umumiy repository’ga tez-tez birlashtirib, har o‘zgarishda avtomatik build va testlardan o‘tkazadigan dasturiy ishlab chiqish amaliyoti. CI integratsiya muammosini katta release oxirida emas, o‘zgarish kiritilgan vaqtga yaqin aniqlashga xizmat qiladi.

Pipeline oqimi

Commit yoki pull request trigger bo‘lganda runner source’ni oladi, dependency o‘rnatadi, lint va static analysis bajaradi, artefakt quradi va testlarni ishga tushiradi. Natija commit status sifatida repository’ga qaytadi. Protected branch faqat majburiy checklar o‘tganda merge’ga ruxsat beradi.

  1. Source checkout va version aniqlash.
  2. Dependency’larni lock file asosida tiklash.
  3. Compile yoki build.
  4. Unit, integration va contract testlar.
  5. Security va quality tekshiruvlari.
  6. Imzolangan artefaktni registry’ga joylash.

Deployment CI’dan keyingi CD bosqichida bo‘lishi mumkin. CI pipeline productionga avtomatik chiqarishi shart emas.

Reproducible build

Bir commit bir xil toolchain va dependency bilan bir xil funksional artefakt berishi kerak. Version lock, containerized runner va aniq environment bu talabni kuchaytiradi. “Latest” dependency yoki tashqi mutable download kechagi yashil commitni bugun sindirishi mumkin.

Build artefakti bir marta yaratiladi va environmentlar orasida promote qilinadi. Production uchun source’dan qayta build qilish test qilingan binary bilan chiqarilgan binary orasida farq yaratadi.

Tez feedback

Pipeline developer contextni unutmasidan natija berishi kerak. Tez lint va unit testlar avval, qimmat integration va end-to-end keyin bajariladi. Mustaqil joblar parallel ishlaydi, ammo umumiy database yoki port izolatsiya qilinadi.

Bosqich Maqsad
Pre-commit Soniyalar ichida lokal xato
Pull request Merge’dan oldingi to‘liq signal
Main branch Integratsiyalangan artefakt
Nightly Qimmat, keng yoki uzoq test

Fail-fast resursni tejashi mumkin, lekin parallel job natijalari baribir yig‘ilsa ko‘proq diagnostika beradi.

Branch va integratsiya

Uzoq yashovchi branchlar katta merge conflict va bir-biridan uzoqlashgan design yaratadi. Kichik, tez-tez birlashtiriladigan o‘zgarish CI prinsipiga mos. Tugallanmagan xususiyat feature flag ortida main branchga kirishi mumkin.

Merge queue bir nechta pull request alohida yashil bo‘lsa ham birga konflikt qilishini tekshiradi. U navbatdagi kombinatsiyani main branch bazasida qayta test qiladi.

Runner va isolation

Ephemeral runner har jobdan keyin yo‘q qilinib, oldingi build state’i oqib o‘tishini kamaytiradi. Cache dependency yuklashni tezlashtiradi, lekin cache key lock file, platforma va tool versioniga bog‘lanadi. Cache artefakt o‘rnini bosmaydi.

Untrusted pull request yuqori huquqli secret bilan ishlamaydi. Fork kodi pipeline scriptni o‘zgartirib tokenni chiqarishi mumkin. Approval va trust boundary bo‘yicha secret exposure ajratiladi.

Sifat darvozalari

Test, lint, type check, coverage threshold, dependency scanning va policy check merge gate bo‘lishi mumkin. Juda ko‘p beqaror gate developerlarni checkni chetlab o‘tishga undaydi. Har gate aniq owner va tuzatish xabariga ega.

Flaky test retry bilan yashirilmaydi. Original failure saqlanadi, flaky rate o‘lchanadi va test tuzatiladi yoki muddatli quarantine qilinadi.

Artefakt va supply chain

Pipeline artefaktga commit, build ID va dependency metadata bog‘laydi. Checksum, imzo va software bill of materials keyingi deploymentda aynan tekshirilgan artefaktni tasdiqlaydi. Runner image va CI actionlar ham version bo‘yicha pin qilinadi.

CI logida parol va token mask qilinadi, artefakt retention esa audit talabiga mos. Build provenance kim, qayerda va qaysi source’dan yaratganini ko‘rsatadi.

Kuzatuv

Queue time, duration, failure rate, flaky rate va runner utilization CI tizimining holatini beradi. Pipeline sekinlashishi developer feedback siklini uzaytiradi. Failurelar product, test va infrastructure kategoriyalariga ajratiladi.

Bog‘liq tushunchalar

Continuous integration, Continuous delivery, Build pipeline, Automated testing, Merge queue, Artifact, Version control