1-bo‘lim
CI/CD nima va u qayerdan paydo bo'ldi
Uzluksiz integratsiya g'oyasi kim tomonidan va qanday sharoitda o'ylab topilgani, CI va CD farqi hamda avtomatlashtirish nimani yutishi.
Ushbu bo‘lim mundarijasi
Jamoada ishlagan har bir dasturchi shu gapni eshitgan:
- Mening mashinamda ishlayapti.
- Lekin serverda ishlamayapti.
- Unda kim oxirgi marta nima o'zgartirdi?
- ... bilmadim. Ikki hafta oldin hammasi joyida edi.
Ikki hafta - bu xatoni qidirish uchun juda uzun muddat. CI/CD aynan shu muddatni ikki daqiqaga tushirish uchun o'ylab topilgan.
Integratsiya do'zaxi #
Eski usulda jamoa shunday ishlardi: har bir dasturchi o'z qismini bir necha hafta yozadi, oxirida hammasi bitta joyga yig'iladi. O'sha yig'ish kuni "integratsiya haftasi" deb atalar edi - chunki u rostdan ham bir hafta davom etardi.
Atamani kim o'ylab topdi? #
1991-yil. Amerikalik dasturiy ta'minot muhandisi Grady Booch o'zining obyektga yo'naltirilgan loyihalash haqidagi kitobida yangi atamani ishlatdi: continuous integration - uzluksiz integratsiya. Uning fikri sodda edi: tizimni oxirida bir marta yig'ish o'rniga, uni doimiy ravishda, kichik qismlar bilan yig'ib borish kerak.
O'sha paytda bu faqat g'oya edi - uni amalga oshiradigan vosita yo'q edi.
G'oya amaliyotga aylanadi #
1996-1999-yillar. Kent Beck Chrysler kompaniyasidagi loyihada Ekstremal dasturlash (Extreme Programming, XP) usulini shakllantirdi. Uzluksiz integratsiya XP ning o'n ikki amaliyotidan biri bo'ldi va endi u aniq talabga aylandi: kod kuniga kamida bir marta umumiy tarmoqqa qo'shilsin va har qo'shilishda testlar ishlasin.
2000-yil. Martin Fowler va Matthew Foemmel "Continuous Integration" maqolasini chop etdi. Maqola g'oyani keng ommaga tanitdi va unda birinchi marta CI serverining vazifalari aniq yozildi: kodni olish, qurish, testlarni ishga tushirish va natijani jamoaga xabar qilish.
2001-yil. ThoughtWorks kompaniyasi CruiseControl ni chiqardi - bu birinchi keng tarqalgan ochiq kodli CI serveri edi. Endi g'oya vositaga ega bo'ldi.
Jenkins tarixi #
2005-yil. Sun Microsystems da ishlagan yapon dasturchisi Kohsuke Kawaguchi Hudson nomli CI serverini yozdi. Sabab shaxsiy edi: u tez-tez buzilgan kod yuborar va jamoani ranjitardi, shuning uchun kodni yuborishdan oldin o'zini tekshiradigan vosita yasadi.
2011-yil. Oracle Sun ni sotib olgandan keyin nom ustida nizo chiqdi. Hamjamiyatning katta qismi loyihani ajratib (fork), unga Jenkins deb nom berdi. Jenkins o'n yildan ortiq vaqt davomida eng ko'p ishlatiladigan CI serveri bo'lib qoldi.
Bulutli CI davri #
2011-yil. Travis CI paydo bo'ldi - u birinchi bo'lib CI ni xizmat sifatida taklif qildi: server sozlash shart emas, repozitoriyga bitta sozlama fayli qo'shiladi, xolos. Ochiq loyihalar uchun bepul edi.
2015-yil. GitLab o'z ichiga CI ni qurdi - kod va quvur bir joyda bo'ldi.
2019-yil, 13-noyabr. GitHub Actions to'liq ishga tushdi. Uning kuchi shundaki, u GitHub ning o'zida yashaydi: kod, muhokama, PR va quvur - bitta sahifada. Ochiq repozitoriylar uchun bepul bo'lgani esa uni o'rganish uchun eng qulay vosita qildi. Shu sababli darslikda aynan shu vosita ishlatiladi.
CI, CD va yana bir CD #
Uch atama doim yonma-yon yuradi va ko'pincha chalkashtiriladi:
| Atama | To'liq nomi | Nima qiladi | Qayerda tugaydi |
|---|---|---|---|
| CI | Continuous Integration | Kod qo'shilganda uni quradi va testlaydi | Natija: "yashil" yoki "qizil" |
| CD | Continuous Delivery | Har bir tekshirilgan versiyani tarqatishga tayyor holatga keltiradi | Relizni odam tugma bosib chiqaradi |
| CD | Continuous Deployment | Tekshiruvdan o'tgan versiyani o'zi serverga chiqaradi | Odam aralashmaydi |
Delivery - hammasi tayyor, lekin chiqarish qaroriga odam javob beradi. Deployment - testlar yashil bo'lsa, kod o'zi ishlab chiqarishga ketadi.
Ko'p jamoa delivery dan boshlaydi va ishonch hosil qilgach, deployment ga o'tadi. Darslikda ikkala variantni ham quramiz.
Avtomatlashtirish nimani yutadi #
Quvur qurish vaqt oladi. U nimani qaytarib beradi?
| Qo'lda | Avtomatik quvur bilan |
|---|---|
| Testlarni yozgan odam eslab qolsa ishga tushiradi | Har bir kommitda o'zi ishlaydi |
| "Menda ishlayapti" - muhit har kimda boshqacha | Har safar bir xil, toza muhit |
| Reliz - bir necha soatlik qo'lda ish | Bir necha daqiqa, bir tugma |
| Xato bir necha kundan keyin topiladi | Xato kiritilgan kommitda topiladi |
| Deploy qadamlari odamning xotirasida | Qadamlar faylda yozilgan va ko'rinadi |
| Yangi dasturchi jarayonni so'rab o'rganadi | Jarayon repozitoriyning o'zida |
Quvur qurgan jamoa kodni tez-tez chiqara boshlaydi. Sababi psixologik: har bir o'zgarish kichik bo'lsa va uni testlar tekshirsa, chiqarish qo'rqinchli bo'lmay qoladi.
Kuniga bir marta chiqaradigan jamoa xatoni bir necha daqiqada tuzatadi. Oyiga bir marta chiqaradigan jamoa esa har chiqarishni bayram - va tashvish - sifatida kutadi.
Quvur qanday ko'rinadi #
Darslik davomida quradigan quvurimiz shunday bosqichlardan iborat bo'ladi:
Bu darslikda nima kerak bo'ladi #
| Talab | Izoh |
|---|---|
| GitHub hisobi | Bepul hisob yetarli |
| Git asoslari | Kommit, tarmoq, push - Git darsligi |
| Terminal bilan ishlash | Oddiy buyruqlar darajasida |
| Docker asoslari | 12-bo'limdan boshlab kerak - Docker darsligi |
| Server | Faqat 15-16 bo'limlar uchun, ixtiyoriy |
Ochiq (public) repozitoriylarda GitHub Actions bepul va cheksiz. Yopiq (private) repozitoriyda bepul hisobga oyiga ma'lum daqiqa beriladi.
Darslikdagi barcha misollar ochiq repozitoriyda bajarilishi mo'ljallangan -
shunda hech narsa uchun to'lamaysiz. Chegarani Settings -> Billing
bo'limida kuzatib borish mumkin.
- «Integratsiya do'zaxi» ni o'z tajribangizdan yoki tasavvuringizdan bitta misol bilan yozing.
- CI, Continuous Delivery va Continuous Deployment farqini uch jumlada tushuntiring.
- Martin Fowler ning 2000-yildagi maqolasini toping va CI serverining vazifalarini yozib oling.
- GitHub'da bepul hisob oching (agar yo'q bo'lsa) va profilingizni to'ldiring.
ci-mashqnomli yangi ochiq repozitoriy yarating.- Uni mahalliy kompyuteringizga klonlang va bitta
README.mdbilan kommit qiling. - Repozitoriyning
Actionsbo'limini oching va tayyor shablonlar ro'yxatini ko'rib chiqing. - Sizga tanish bo'lgan bitta loyihada qaysi qadamlar hozir qo'lda bajarilishini sanang.
- Shu qadamlardan qaysi biri avtomatlashtirishga eng arzon ekanini belgilang.
- Darslik oxirida qurmoqchi bo'lgan quvuringizni qog'ozda chizib qo'ying.
Xulosa #
- Uzluksiz integratsiya - kodni kuniga bir necha marta umumiy tarmoqqa qo'shish va har safar tekshirish.
- Atamani 1991-yilda Grady Booch kiritgan, amaliyotga esa Kent Beck XP orqali olib kirgan.
- 2000-yilgi Fowler maqolasi g'oyani ommalashtirdi, 2001-yilda CruiseControl birinchi vosita bo'ldi.
- Hudson (2005) nom nizosidan keyin Jenkins ga aylandi va o'n yillab yetakchi bo'lib qoldi.
- Travis CI (2011) CI ni xizmat sifatida taklif qildi - server sozlash shart emas.
- GitHub Actions 2019-yil 13-noyabrda to'liq ishga tushdi; ochiq repozitoriylarda bepul.
- CI quradi va testlaydi; Continuous Delivery chiqarishga tayyorlaydi; Continuous Deployment o'zi chiqaradi.
- Quvurning asosiy qoidasi: bosqich yiqilsa, zanjir to'xtaydi.
- Eng katta foyda tezlik emas, ishonch: kichik o'zgarishni chiqarish qo'rqinchli bo'lmay qoladi.
- Jarayon odamning xotirasida emas, repozitoriydagi faylda yozilgan bo'ladi.
Keyingi bo'limda birinchi workflow faylini yozamiz va uni ishga tushiramiz.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
Xatolik topdingizmi?
Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.