Joylashtirish mumkinmi? Keyingi versiya raqami nima? Avtomatik reliz yozuvlarini qanday yaratish mumkin?

Alfa. Beta. Ishlab chiqarish. Ikki marta - iOS va Android. Plus Codepush. Bu sizning React Native ilovangizning versiyalari bo'lishi mumkin. Men sizlar bilan GIT oqimi va "An'anaviy majburiyatlar" dan foydalangan holda hamma narsani avtomatik ravishda qanday o'rnatishimiz haqida baham ko'rmoqchiman. "Semantik-reliz" dan ilhomlangan.

Bu versiyalarni qachon chiqaramiz?

  • Alfa versiyasi. Har kecha. Ichki test uchun. Rivojlanish filiali asosida.
  • Beta versiyasi. Beta tarmog'iga bosish orqali ishga tushirilgan.
  • Ishlab chiqarish versiyasi. Apple Store va Google Play-ga yuklangan. Asosiy filialga bosish orqali ishga tushirildi.

Ushbu versiyalarning barchasi faqat uni chiqarish uchunsabab mavjud bo'lganda chiqariladi. Agar oxirgi versiyadan beri yangi majburiyat bo'lmasa, ish jarayoni avtomatik ravishda bekor qilinadi.

Bizning versiyamiz qanday ko'rinadi?

Biz "semver" dan foydalanamiz. mayor. Kichik. Yamoq. Bu 1.3.4 bo'lishi mumkin. Biz versiyani chiqarganimizda, biz GIT-da noyob teg yaratamiz. Masalan, android/production/1.3.4/7683 yoki ios/alpha/1.5.0/8754.

Nega biz versiyani package.json 🚫 da saqlamaymiz

Agar biz versiyanipackage.json faylida saqlagan bo'lsak (ko'pchilik kabi) biz versiyani avtomatik ravishda oshira olmaymiz. Chunki u CircleCI tomonidan o'zgartirilgan va CircleCI o'zgarishlarni omborga qaytarishi kerak bo'ladi. Bu yangi nashrni ishga tushiradi. Chunki har bir bosish ozodlikni keltirib chiqaradi. GIT tarixida qancha Bump version majburiyatga ega bo'lishimiz haqida gapirmayapmiz.

U Production Release bilan qanday ishlaydi?

Ushbu misolda biz asosiy filialga o'tamiz va Android va iOS ilovasi do'konlarga yuklanishini kutamiz. Biz iOS tuzilishidagi muvaffaqiyatsizlikni simulyatsiya qilamiz.

Magistrga №1 bosing

Asosiy filial A topshiriqdan D topshirig'iga "tez yo'naltirildi" (birlashtirildi). Ikkalasi uchun oxirgi versiya A topshiriqda (teglarga qarang).

Chiqarish ish jarayoni ishga tushirildi. Birinchi qadam. Bog'liqlarni o'rnating. Katta gap yo'q. U faqat tugun modullari papkasini yaratadi. Ikkinchi qadam. Kod sifatini tekshirish. hazil. Lint. Oqim. Agar ulardan biri xato bilan yakunlansa, butun ish jarayoni bekor qilinadi.

Ushbu qadamdan so'ng, bizning ish jarayonimiz Android filiali va iOS filialiga bo'linadi. Va bu vazifani tahlil qilish ish jarayonida katta rol o'ynaydigan nuqta.

Android
Bizning skriptimiz (Android tahlili) android/production uchun oxirgi tegni topadi (shunchaki git buyruq qatori vositasi yordamida). Teg A topshiriqda topilgan. Teg nomini tahlil qilish orqali u oxirgi versiyani oladi. Bu 1.3.4. Keyin, majburiyatlarni tahlil qilib, keyingi versiya raqamini topadi.

  • B ga rioya qiling. Xususiyat (feat kalit so'z). Bu biz kichik raqamni 1.4.0 oshirishimiz kerakligini anglatadi. Agar siz kichik raqamni oshirsangiz, yamoq raqamini qayta o'rnatishingiz kerak (“semver” hujjatlariga qarang).
  • C ga rioya qiling. Tuzatish (fix kalit so'z). 1.4.1 yamoq raqamini oshiradi.
  • D ga rioya qiling. Bu shunchaki hujjatlarning yangilanishi (doc kalit so'zi). Versiya raqamida hech qanday o'zgarish yo'q.

Bo'ldi shu. Biz keyingi versiya raqamini oldik. Qo'lda harakatlar yo'q! Keyingi 1.4.1 versiyasi joriy 1.3.4 versiyasidan yuqoriroq. Chiqarish davom etmoqda. Avtomatik ravishda qaror qabul qilinadi. Biz raqamni Fastlane-ga o'tkazib, relizni yaratishimiz mumkin. Qurilish tayyor bo'lgach, versiyani do'konga joylashtirish orqali davom etadi. Joylashtirilgandan so'ng, u HEAD (commit D) da yangi teg yaratadi va nashr yozuvlarini yaratadi. Android tugadi!

iOS
Bizning skriptimiz (iOS tahlil bosqichi) ios/production uchun oxirgi tegni topadi. Bu android qismi bilan bir xil tarzda davom etadi. U 1.4.1 keyingi versiya raqamini oladi va bosqichlarni yaratish va joylashtirishni davom ettiradi.

Buni biroz murakkablashtirish uchun aytaylik, iOS versiyasini yaratish muvaffaqiyatsiz tugadi. Qurilish vositamiz noto'g'ri tuzilganligi sababli.

Endi nima qilishimiz kerak? Android allaqachon chiqarilgan. Agar biz biror narsani o'zgartirsak va masterga bossak, u yana Androidni chiqaradi. Biz CircleCI-da kutishimiz va ishni qo'lda bekor qilishimiz mumkin. 🤔 Yaxshiyamki, biz bunga majbur emasmiz. Keling, nima uchun ekanligini ko'rib chiqaylik.

№2 masterga suring

Biz iOS ilovamiz chiqarilmaganiga sabab bo'lgan muammoni hal qildik. Endi biz tuzatishni ustaga topshirdik. Bu tarqatish ish jarayonini yana ishga tushiradi. Lekin bizning skriptlarimiz tufayli bu safar ish jarayoni boshqacha bo'ladi.

Android
Android ishlab chiqarishning oxirgi versiyasidan (1.4.1) beri faqat bitta majburiyat bor. Va bu oxirgi nashrdan beri o'zgargan narsa. Chunki Android muvaffaqiyatli chiqarildi (Push to master #1). Yangi majburiyat E versiya raqamini oshirmaydi. Chunki bu faqat qurilish vositalarini yangilashdir. Android uchun ish jarayoni Android tahlili bosqichi bilan tugaydi.

iOS
Vaziyat №1-ga o'tish paytidagi kabi bo'ladi. Yana bitta majburiyat bor. Ammo bu majburiyat versiyani o'zgartirmaydi. iOS versiyasining so'nggi versiyasi 1.3.4, A bo'yicha. U majburiyatlarni tahlil qiladi va yangi versiya 1.4.1 bo'lishini aniqlaydi. U qurish, joylashtirish bilan davom etadi va bu safar muvaffaqiyatli bo'ladi. 🎉

Biz yana ustaga bosgan bo'lsak ham, Android versiyasi yana chiqarilmadi. Biz qo'lda biror narsani bekor qilishimiz shart emas edi. Hammasi avtomatik ishlaydi. Faqat majburiyatlarni tahlil qilish orqali.

Chiqarish eslatmalari

U hatto majburiyatlarni tahlil qilish orqali nashr yozuvlarini ham yaratishi mumkin. Bu bizning GIT tariximiz №2 masterga o'tishdan keyin.

iOS uchun relizlar eslatmalarida yangi xususiyat sifatida commit B va tuzatish (yamoq) sifatida commitC kiradi. U C va D majburiyatini o'tkazib yuboradi, chunki ular foydalanuvchilar uchun hech narsani o'zgartirmaydi.

Codepush bilan mos keladimi? 👍

Siz allaqachon codepush haqida eshitgansiz. Bizga faqat JavaScript qismini chiqarish imkoniyatini beruvchi vosita. Foydalanuvchilar darhol yangilanishlarni olishlari mumkin edi. Yaxshi fikr. Ammo haqiqiy dunyoda, biz reliz tayyorlayotganimizda, faqat JavaScript-ni chiqarishimiz mumkinmi yoki yo'qmi, bilish har doim qiyin edi. Har doim shubhalar bor edi. Va har bir nashrni bajarish uchun bizga qo'shimcha narsa kerak edi.

Endi bizda ushbu chiqarish vositasi mavjud. U biz uchun majburiyatlarni tahlil qiladi. Bizning ishlab chiquvchilarimiz faqat ular ustida ishlayotgan majburiyatni belgilashlari kerak. Aytaylik, ular majburiyat xabariga kalit so'z yozadilar. Masalan, [codepush-ok].

Keyin u do'konlarga yuklash paytida xuddi shunday qiladi. Codepush versiyasining oxirgi tegini topadi. O'sha relizdan boshlab majburiyatlarni tahlil qiling. Agar [codepush-ok] deb belgilanmagan bitta majburiyat bo'lsa, u joylashtirishni bekor qiladi. Agar barcha topshiriqlar [codepush-ok] bilan belgilangan bo'lsa, biz codepush versiyasini chiqarishimiz mumkin. Bu oson emasmi?

React Native ilovalarini qanday chiqarasiz?

Izoh qoldirsangiz va chiqarish siringizni aytsangiz xursand bo'laman. React Native ilovasini versiyalash bilan qanday shug'ullanasiz? Siz buni hali ham qo'lda qilyapsizmi? package.json ishlatasizmi?

📝 Ushbu hikoyani keyinroq "Jurnal"da o'qing.

🗞 Har yakshanba kuni ertalab sizning pochta qutingizda kutilayotgan haftaning eng e'tiborga molik texnik hikoyalari, fikrlari va yangiliklari bilan uyg'oning: E'tiborli axborot byulletenini oling ›