Keshlash amallari va kompozit harakatlar tomonidan qo'llab-quvvatlanadigan bog'liq ishlar bilan GitHub Actions-dan maksimal darajada foydalaning

GitHub blogi takrorlanishni kamaytirish uchun kompozit harakatlarni ochib beradigan "post nashr etdi". QURUQ kodiga ega bo'lishni kim yoqtirmaydi? Kompozit harakatlar qanchalik qo'shimcha qiymat keltirishini va ularning potentsial cheklovlarini ko'rish uchun men uni haqiqiy dunyoga o'xshash vaziyat bilan sinab ko'rdim.

Bu, shuningdek, yana ikkita GitHub harakat tushunchalarini namoyish qilish imkoniyatidir - men hozir yaxshi ko'raman:

  • Keshlash amallari: faqat kerak bo'lganda bog'liqliklarni o'rnatish.
  • Bog'liq bo'lgan ishlar: vazifalarni parallellashtirish va/yoki vazifalarni yanada noziklik bilan ajratish.

Ushbu maqoladagi misolni ushbu omborda topish mumkin:



Nega bizga qaram bo'lgan ishlar kerak?

NodeJs loyihalarida linting, qurilish va birlik sinovi kabi takroriy tekshiruvlar mavjud. GitHub amallari yordamida buni sozlash juda oson: hamma narsa bitta ishda joylashgan ish oqimini yarating.

Mana bir nechta foydali havolalar:

Bu misol ishlaydi, lekin tezda ba'zi cheklovlarga duch kelishi mumkin, masalan:

  • Paralelizatsiya tekshirilmaydi: Barcha qadamlar ketma-ket, vazifalarni parallellashtirish imkoni yo'q.
  • Granularlik yetarli emas: Agar ba'zi tekshiruvlar o'tish uchun talab qilingan deb belgilansa, GitHub filialini himoya qilish qoidalarida aniqroq aniqlik zarur.
  • Matritsani sinab ko'rish: Agar ba'zi qadamlar sozlashni talab qilsa:
    # …boshlash bosqichlari…matritsa konfiguratsiyasi, faqat bir necha bosqichda matritsa konfiguratsiyasi zarur bo'lganda, u barcha bosqichlarga ta'sir qiladi.

Yuqoridagi fikrlarni hal qilish uchun qadamlarni maxsus ishlarga bo'lish kerak. Quyidagi koddan foydalanish yordam berishi mumkin:

Barcha uchta ish parallel ravishda bajariladi. Bu ba'zi bir ortiqcha narsalarni yaratadi, chunki linting, qurilish va birlik sinovlari barcha bog'liqliklarni o'rnatishni talab qiladi.

Eslatma: Har bir ishni bajarish uchun vaqt kerak, shuning uchun ba'zi vazifalarni birgalikda guruhlash maqsadga muvofiqdir. Bundan tashqari, bir vaqtning o'zida bajariladigan ishlarda cheklovlar mavjud, shuning uchun ish oqimingizni ko'p sonli parallel ishlarga bo'lish uchun haqiqiy qiymat yo'q.

Qo'shimcha ish o'rnatish va bog'liqliklarni o'rnatishga bag'ishlanishi mumkin, ammo boshqa uchta bosqichdan oldin bajarilishi kerak. Bu qaram ish o'rinlari uchun.

Bog'liq ishlardan qanday foydalanish kerak?

Bog'liq ishlar jobs.<job id>.need parametriga tayanadi ("hujjatlarga havola"). Oldingi skelet quyidagi koddan foydalanadi:

Ushbu misol juda oddiy bo'lsa-da, yanada ekzotik bog'liqliklar konfiguratsiyasini o'rnatish mumkin, jumladan, if: always() parametri ("hujjatlarga havola") bilan kerakli ishlarda nosozlik holatini qabul qilish.

Ish jarayonining buzilishining yana bir misoli uchun "Eduard Tomsonning ushbu maqolasini" ko'rib chiqing.

setup ishining maqsadi bir marta va umuman o'rnatilgan bog'liqliklarga ega bo'lishdir. Biroq, har bir ish noldan boshlangani va ma'lumotlar ish bo'yicha saqlanib qolmaganligi sababli, bog'liqliklar yo'qoladi. Yaxshiyamki, actions/cache yordamga keladi.

Keshlash bog'liqliklari

actions/cache (repozitoriy havola) standart usulda ishlaydi:

  • Keshga bir yoki bir nechta jild(lar) yo‘lini taqdim eting. Keshga olinadigan tarkib ish oxirida hal qilinadi.
  • Keshni aniqlash uchun kalitni taqdim eting. Kalit berilganda, kesh topilsa, harakat chaqirilgan bosqichda tarkib tiklanadi.

Kesh harakatlaridan foydalanib, GitHub harakati quyidagicha o'sadi:

lint, build va test vazifalari setup tugashini kutishi kerakligi sababli, kesh mavjudligi kafolatlanadi. Keyin har bir ishni davom ettirish uchun faqat keshlangan bog'liqliklarni tiklash kerak.

Kesh kaliti toʻgʻri oʻrnatilganligiga ishonch hosil qiling… Ha, bu eslatma juda ogʻriqli tajribalardan olingan.

"Jonatan Uilkinsonning ushbu maqolasi" tufayli, ushbu konfiguratsiyani bir qadam oldinga olib borish mumkin: agar keshlangan bog'liqliklar mavjud bo'lmasa, bog'liqliklarni o'rnating!

actions/cache kesh topilgan yoki topilmaganligini ko'rsatadigan cache-hit mantiqiy qiymatini qaytaradi, bu esa bog'liqliklarni o'rnatishni shartli ishga tushirish uchun mukammal belgidir. setup ishida faqat ikkita o'zgartirish talab qilinadi:

  • Kesh bosqichiga ID qo'shing.
  • npm install ni faqat kesh qadami cache-hit rost bo'lsagina bajaring.

Agar bog'liqliklarni o'rnatish bosqichi to'g'ri o'tkazib yuborilganligini "Amallar" yorlig'ida tekshirishingiz mumkin.

Kodni DRY saqlang: Kompozit harakatlar

Oldingi misol juda ko'p ortiqcha narsalarni o'z ichiga oladi, shuning uchun kompozit harakatlar va'da qilingan DRY kodini etkazib beradimi yoki yo'qligini ko'rish uchun vaqt kerak.

Kompozit amalni o'rnating

Biz faktorizatsiya qilmoqchi bo'lgan ikkita qadam tugunni sozlash va kesh harakatidir. "Metama'lumotlar sintaksisi hujjatlari" asosida kompozit harakat ta'rifi:

Men ikkita sababga ko'ra actions/checkout@v2 ni kiritmadim:

  • Aksariyat kompaniyalarning omborlari shaxsiydir, shuning uchun kompozit harakatlar importi mahalliy fayllarni import qilish orqali amalga oshirilishi kerak (“sintaksis hujjatlari bu yerda”). Mahalliy faylni yuklashdan oldin ish omborni tekshirishi kerak.
  • Men hisob-kitob bosqichida ba'zi qo'shimcha parametrlarni talab qiladigan boshqa ish jarayonini o'rnatmoqchiman.

Bizning misolimiz quyidagicha ko'rinadi:

Matritsa sinovi

Endi matritsa konfiguratsiyasini o'rnatish ancha oson. Keling, ushbu eksantrik misolni qabul qilaylik:

  • Qurilish bosqichini tekshirish uchun 12-tugun va 14-tugundan foydalaning
  • Tugunni tekshirish uchun 15-tugundan foydalaning
  • Birlik testini bajarish uchun 14-tugundan foydalaning

Bunday holatda, o'rnatish barcha imkoniyatlarni va bog'liqlik keshlari to'g'ri yaratilganligini ta'minlash uchun uchta tugun versiyasini qamrab olishi kerak. Kesh kaliti tugun versiyasini va package-lock.json xeshni o'z ichiga olganligi sababli, keshlangan bog'liqliklar keyingi ishlarda xavfsiz tarzda olinishi mumkin.

Barcha testlardan o'tganda, yashil rangdagi chiroyli grafik ko'rinadi, bu quyidagicha ko'rinadi:

Haqiqiy dunyo xulosalari

Hujjatlar asosida qanday kompozitsion harakatlar taklif qilishini ko'rganimda, mening kichik tajribam chuqur sho'ng'in bo'lishdan uzoqdir. Lekin hozircha menga yoqadi. Mana qisqacha xulosa:

  • DRY kodini saqlash uchun kompozitsiya namunasi har doim mamnuniyat bilan qabul qilinadi!
  • Shaxsiy omborlarda kompozit harakatlardan foydalanish imkoniyati mavjud.
  • Muayyan qobiq bilan ba'zi qadamlarni bajarish imkoniyati ba'zi sozlash vazifalari uchun juda foydali.
  • Yaxshi hujjatlar!

Agar men salbiy fikrlarni eslatib o'tadigan bo'lsam, men faqat shartli qadamlar qo'llab-quvvatlanmasligi haqida o'ylashim mumkin. Bir nechta ish oqimlari ombori bilan men ixtiyoriy npm install dan so'ng darhol cache-restore harakatining ortiqcha ketma-ketligiga ega bo'ldim. Ya'ni, bu juda aniq va men shartli qadamlarga ega bo'lmaslik mutlaqo chidab bo'lmas deb hisoblayman.

Iltimos, unutmang: to'g'ri o'rnatilgan kod do'stona koddir, shuning uchun CI-ni e'tiborsiz qoldirmang!

Hozirgacha o'qiganingiz uchun tashakkur va GitHub Actions bilan CI qurish baxtli!