Katta IT kompaniyalarda (Google, Meta, Target IT) dasturchilar hech qachon kodni serverga qo'lda yuklamaydi. Har bir `git push` va Pull Request ortidan bulutli robotlar ishga tushadi: kod uslubini tekshiradi, minglab avtomatlashtirilgan testlarni yurgizadi va faqat barcha sinovlardan o'tgan kodni production serverga chiqaradi.
1. Dasturchi kodni jo'natishdan oldin testlarni qo'lda ishga tushirishni unutdi.
2. Uning kompyuteridagi sozlamalar serverdagidan farq qiladi.
3. Juma kuni kechqurun bitta nuqta xatosi tufayli butun sayt qulaydi va foydalanuvchilar `500 Server Error` xatosini ko'radi.
Kompyuter charchamaydi, ovqatga shoshilmaydi va birorta testni o'tkazib yubormaydi.
CI/CD Konveyeri — bu qat'iy nazoratchi: toza Linux konteynerida barcha testlar 100% yashil bo'lmaguncha, kod serverga qo'yilmaydi!
Har bir commit yoki Pull Request paytida kodni avtomatik tekshirish.
• Linting: kod tozaligi va uslubini tekshirish (ESLint).
• Unit Tests: barcha matematik va mantiqiy funksiyalarni sinovdan o'tkazish.
• Build: dasturni yig'ish va xatolar yo'qligiga ishonch hosil qilish.
Tekshiruvdan muvaffaqiyatli o'tgan kodni inson aralashuvisiz jonli serverga joylash.
• Agar barcha CI testlar yashil bo'lsa — dastur Vercel yoki Cloud serverga avtomatik yuklanadi.
• Agar bitta test yiqilsa — deploy zudlik bilan to'xtatiladi!
Loyiha ildizidagi `.github/workflows/*.yml` konfiguratsiya fayli.
Robotni uyg'otuvchi hodisa: `push`, `pull_request` yoki vaqt taymeri.
GitHub tomonidan ajratiladigan toza virtual Linux (Ubuntu) serverlari.
Bitta runnerda bajariladigan qadamlar to'plami (masalan: `lint`, `test`, `deploy`).
Terminal buyruqlari (`npm test`) yoki tayyor GitHub modullari (`actions/checkout@v4`).
YAML jingalak qavslar `{}` o'rniga faqat bo'sh joylar (indentation) orqali ierarxiyani belgilaydi.
Bosh qoida: YAML da `Tab` tugmasi mutlaqo taqiqlangan! Har bir ichki qadam roppa-rosa 2 ta probel bilan ajratiladi. Bitta xato probel butun pipeline'ni buzadi.
• `on: [push]` — har qanday branchga yangi commit push qilinganda.
• `on: pull_request` — kimdir `main` branchga PR ochganda.
• `schedule: - cron: '0 0 * * *'` — har kecha soat 00:00 da avtomatik yurgizish.
Bu virtual serverlar vaqtini tejaydi: faqat asosiy kod tekshiriladi.
PR ko'rigida "Nega bu yerda bo'sh joy qolib ketgan?", "Nega ishlatilmagan o'zgaruvchi e'lon qilingan?" deb bahslashish shart emas.
ESLint kodni ishga tushirmasdan, bir necha millisekundda grammatik xatolarni topadi!
Linter xato topsa, `exit code 1` qaytaradi va pipeline darhol to'xtaydi.
Regressiya — dasturchi yangi funksiya qo'shganda, kecha ishlab turgan eski kod tasodifan buzilib qolishi!
Avtomat testlar yuzlab stsenariylarni bir zumda tekshirib chiqadi. Agar o'yin bali xato hisoblansa — robot qizil signal chaladi!
CI terminalida barcha testlar yashil qushcha bilan tasdiqlanadi.
Deploy jobi hech qachon o'zboshimchalik bilan ishga tushmasligi kerak:
`deploy: needs: [lint, test]`
Linter yiqilsa — deploy boshlanmaydi. Test yiqilsa — deploy bekor qilinadi. Faqat ikkalasi ham yashil bo'lsagina sayt internetda yangilanadi!
`git push` bosilganidan 3 daqiqa o'tib, yangilangan o'yin butun dunyoga tarqaladi!
Hech qachon shaxsiy parollarni, server tokenlarini `.yml` fayli ichida ochiq yozib qo'ymang!
Xakerlik botlari ochiq GitHub omborlarini kecha-yu kunduz kuzatib boradi va 2 soniyada kalitlaringizni o'g'irlaydi.
1. Repository da Settings → Secrets and variables → Actions ga kiring.
2. Yangi sir yarating: masalan, `VERCEL_TOKEN`.
3. YAML ichida shunday chaqiring: `${{ secrets.VERCEL_TOKEN }}`.
GitHub qiymatni hatto konsol chiqishida ham yashirib, `***` qilib ko'rsatadi!
Linter xatosi stsenariysini yurgizib, dastur to'xtashini kuzating.
ESLint FailureJest test xatosini ishga tushiring: deploy bekor qilinishini ko'ring.
Jest Test CrashBarcha testlarni yashil qilib, o'yinni Vercel ga chiqaring!
All Checks Passedclasses/9-sinf/3-hafta/15-dars-ci-cd-va-avtomatlashtirish/lab/index.html
| Ball | Talab |
|---|---|
| 1–3 ball | CI/CD nazariyasi va YAML strukturasi to'g'ri izohlandi |
| 4–7 ball | Laboratoriyada linter va test xatoliklari tahlil qilindi |
| 8–10 ball | Barcha bosqichlar yashil o'tdi, varaqadagi barcha topshiriqlar bajarildi |
Siz haqiqiy muhandislik yo'lini bosib o'tdingiz: ilk `git commit` va branchlardan tortib, Pull Request, Kod Ko'rigi va to'liq avtomatlashtirilgan CI/CD konveyerigacha!