CI/CD nima?
Har safar kod yozganingizdan keyin uni qo'lda tekshirish, testlarni yugurtirish, build qilish va serverga qo'lda ko'chirish โ bu zerikarli, sekin va xatoga moyil. CI/CD aynan shu jarayonlarni avtomatlashtiradi: siz kodni git push qilasiz, qolgan hammasini mashina bajaradi.
Qo'lda jarayonning muammosi
Tasavvur qiling: jamoada 5 dasturchi bor. Har biri o'z shoxchasida (branch) ishlaydi va haftada bir marta hamma o'zgarishlarni birlashtiradi. Birlashtirish paytida hamma narsa buziladi โ kimningdir kodi boshqasinikiga zid keladi, testlar ishlamay qoladi, deploy paytida noto'g'ri fayl ko'chib ketadi.
Qo'lda deploy odatda quyidagicha ko'rinadi:
- Dasturchi lokal mashinasida
npm testni ishga tushiradi (ba'zan unutib qoldiradi). npm run buildqiladi va natijani qo'lda serverga FTP orqali yuklaydi.- Serverda kerakli buyruqlarni qo'lda teradi (migratsiya, restart va h.k.).
- Biror qadam esdan chiqsa โ sayt ishlamay qoladi, sabab esa tunda topiladi.
CI โ uzluksiz integratsiya (Continuous Integration)
CI โ har bir git push yoki Pull Request paytida kodni avtomatik tekshirish amaliyoti. Toza, avtomatik muhitda kod yuklab olinadi, bog'liqliklar o'rnatiladi, linter, testlar va build ishga tushadi.
- Tez fikr-mulohaza: agar testlar buzilsa, dasturchi bir necha daqiqada bilib oladi, bir haftadan keyin emas.
- Kichik birlashuvlar: har kim tez-tez birlashtiradi, shuning uchun ziddiyatlar kichik bo'ladi.
- Ishonch: asosiy shoxcha (main) doim "yashil" โ ya'ni testlardan o'tgan holatda turadi.
CD โ uzluksiz yetkazib berish va deploy
CD ikki ma'noda ishlatiladi va ularni farqlash muhim:
- Continuous Delivery (yetkazib berish): kod avtomatik tayyorlanadi va istalgan vaqtda deploy qilishga tayyor turadi, lekin oxirgi tugmani odam bosadi.
- Continuous Deployment (deploy): testlardan o'tgan har bir o'zgarish avtomatik ravishda ishlab chiqarish (production) serveriga chiqadi. Hech kim tugma bosmaydi.
Ko'p jamoalar avval Continuous Delivery bilan boshlaydi (xavfsizroq), ishonch ortgach Continuous Deployment ga o'tadi.
Pipeline (quvur) tushunchasi
CI/CD jarayoni odatda pipeline โ ketma-ket bosqichlar quvuri sifatida tasvirlanadi. Har bir bosqich muvaffaqiyatli tugasagina keyingisi ishga tushadi:
push / PR
|
[ 1. Checkout ] <- kodni yuklab olish
|
[ 2. Install ] <- npm ci (bog'liqliklar)
|
[ 3. Lint ] <- kod uslubini tekshirish
|
[ 4. Test ] <- avtomatik testlar
|
[ 5. Build ] <- ishlab chiqarish uchun yig'ish
|
[ 6. Deploy ] <- serverga chiqarish (faqat main)
Agar 4-bosqich (Test) buzilsa, 5 va 6 umuman ishga tushmaydi โ buzuq kod hech qachon serverga chiqmaydi. Aynan shu narsa CI/CD ni kuchli qiladi.
Vositalar: qaysi birini tanlash?
- GitHub Actions โ GitHub'ga to'g'ridan-to'g'ri o'rnatilgan, YAML fayl bilan sozlanadi. Ochiq repolar uchun bepul, o'rganish oson. Biz shu vositani o'rganamiz.
- GitLab CI/CD โ GitLab'ga o'rnatilgan,
.gitlab-ci.ymlfayli bilan ishlaydi. Konsepsiyalar juda o'xshash. - Jenkins โ eski, kuchli, o'zingiz serverga o'rnatasiz. Katta korxonalarda ko'p uchraydi, lekin sozlash murakkabroq.
- CircleCI, Travis CI, Bitbucket Pipelines โ boshqa mashhur bulutli xizmatlar.
CI/CD ning haqiqiy foydasi
- Kamroq xato: odam unutadigan qadamlarni mashina hech qachon unutmaydi.
- Tezlik: deploy daqiqalar ichida, tunlarcha qo'lda ishlashsiz.
- Ishonch: har bir o'zgarish bir xil, takrorlanadigan jarayondan o'tadi.
- Hujjatlashtirilgan jarayon: pipeline YAML fayli โ bu jamoaning deploy jarayonining yagona haqiqat manbai.
- Xotirjamlik: "juma kuni deploy qilishdan qo'rqish" muammosi yo'qoladi.
Xulosa
- CI โ har push/PR da kodni avtomatik tekshirish (lint, test, build).
- CD โ kodni avtomatik yetkazish (Delivery) yoki avtomatik deploy qilish (Deployment).
- Pipeline โ ketma-ket bosqichlar; buzuq bosqich keyingilarini to'xtatadi.
- GitHub Actions, GitLab CI, Jenkins โ vositalar; g'oya bir xil.
- Foyda: kamroq xato, tezroq deploy, ko'proq ishonch.