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.

🕑 8 daqiqa o‘qish 📄 1 090 so‘z 👁 0 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. Integratsiya do'zaxi
  2. Atamani kim o'ylab topdi?
  3. G'oya amaliyotga aylanadi
  4. Jenkins tarixi
  5. Bulutli CI davri
  6. CI, CD va yana bir CD
  7. Avtomatlashtirish nimani yutadi
  8. Quvur qanday ko'rinadi
  9. Bu darslikda nima kerak bo'ladi
  10. Xulosa

Jamoada ishlagan har bir dasturchi shu gapni eshitgan:

Natija
- 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.

Kech integratsiya Uzluksiz integratsiya ! 3 hafta alohida ishlash hech kim boshqasining kodini ko'rmaydi oxirida - yuzlab konflikt Xato qayerdaligi noma'lum kuniga bir necha marta qo'shiladi har qo'shilishda testlar ishlaydi konflikt kichik va tez yechiladi Xato oxirgi kommitda Asosiy g'oya: integratsiya og'riqli bo'lsa - uni tez-tez qiling, shunda u kichik bo'lib qoladi
Bir marta katta yig'ish o'rniga - kuniga bir necha marta kichik yig'ish

Atamani kim o'ylab topdi? #

Grady Booch - «uzluksiz integratsiya» atamasining muallifi

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 #

Kent Beck - Ekstremal dasturlash (XP) asoschisi

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 #

Kohsuke Kawaguchi - Hudson va Jenkins muallifi

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.

Uzluksiz integratsiya tarixi 1991 Booch: atama 1999 Beck: XP amaliyoti 2001 CruiseControl birinchi server 2005 Hudson (keyin Jenkins) 2011 Travis CI: bulutli CI 2019 GitHub Actions G'oyadan birinchi vositagacha - o'n yil; bugun esa u bir necha daqiqada yoqiladi
Yigirma sakkiz yillik yo'l: kitobdagi atamadan har bir repozitoriydagi tugmagacha

CI, CD va yana bir CD #

Uch atama doim yonma-yon yuradi va ko'pincha chalkashtiriladi:

AtamaTo'liq nomiNima qiladiQayerda tugaydi
CIContinuous IntegrationKod qo'shilganda uni quradi va testlaydiNatija: "yashil" yoki "qizil"
CDContinuous DeliveryHar bir tekshirilgan versiyani tarqatishga tayyor holatga keltiradiRelizni odam tugma bosib chiqaradi
CDContinuous DeploymentTekshiruvdan o'tgan versiyani o'zi serverga chiqaradiOdam aralashmaydi
Ikkala CD ning farqi bitta tugmada

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'ldaAvtomatik quvur bilan
Testlarni yozgan odam eslab qolsa ishga tushiradiHar bir kommitda o'zi ishlaydi
"Menda ishlayapti" - muhit har kimda boshqachaHar safar bir xil, toza muhit
Reliz - bir necha soatlik qo'lda ishBir necha daqiqa, bir tugma
Xato bir necha kundan keyin topiladiXato kiritilgan kommitda topiladi
Deploy qadamlari odamning xotirasidaQadamlar faylda yozilgan va ko'rinadi
Yangi dasturchi jarayonni so'rab o'rganadiJarayon repozitoriyning o'zida
Eng qimmat foyda - tezlik emas, ishonch

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:

Kommitdan serverga git push o'zgarish yuborildi test linter va testlar build obraz quriladi registry obraz saqlanadi deploy server Har bir bosqich o'zidan oldingisi yashil bo'lsagina ishlaydi Testlar qizil bo'lsa - obraz qurilmaydi, deploy umuman bo'lmaydi
Quvur - shartli zanjir: bitta bo'g'in uzilsa, keyingilari ishlamaydi

Bu darslikda nima kerak bo'ladi #

TalabIzoh
GitHub hisobiBepul hisob yetarli
Git asoslariKommit, tarmoq, push - Git darsligi
Terminal bilan ishlashOddiy buyruqlar darajasida
Docker asoslari12-bo'limdan boshlab kerak - Docker darsligi
ServerFaqat 15-16 bo'limlar uchun, ixtiyoriy
Bepul chegaralar

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.

Amaliy topshiriq
  1. «Integratsiya do'zaxi» ni o'z tajribangizdan yoki tasavvuringizdan bitta misol bilan yozing.
  2. CI, Continuous Delivery va Continuous Deployment farqini uch jumlada tushuntiring.
  3. Martin Fowler ning 2000-yildagi maqolasini toping va CI serverining vazifalarini yozib oling.
  4. GitHub'da bepul hisob oching (agar yo'q bo'lsa) va profilingizni to'ldiring.
  5. ci-mashq nomli yangi ochiq repozitoriy yarating.
  6. Uni mahalliy kompyuteringizga klonlang va bitta README.md bilan kommit qiling.
  7. Repozitoriyning Actions bo'limini oching va tayyor shablonlar ro'yxatini ko'rib chiqing.
  8. Sizga tanish bo'lgan bitta loyihada qaysi qadamlar hozir qo'lda bajarilishini sanang.
  9. Shu qadamlardan qaysi biri avtomatlashtirishga eng arzon ekanini belgilang.
  10. 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.

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.