Macademia'nın robotik ve mühendislik programı · ücretsiz seviye tespiti ve kişisel öğrenme yolu

Bölüm 9 · Yazılımın içi · Ders 46

CI/CD hattı ve kademeli dağıtım

Robot yazılımı güncellemesi testlerden ve canary filodan geçerek dağıtılıyor

Veri. 200 robotluk bir depo filosunun yazılım ekibi günde 14 commit gönderiyor; bunların yaklaşık %30'unda bir hata var. Her commit otomatik olarak derlenir, birim testleri ve simülasyonda entegrasyon testi koşar, 3 test robotlu hazırlık ortamına çıkar. Geçen sürüm önce filonun %10'una (20 robot) gider: 50'şer görevde hata oranı %2'yi aşarsa otomatik geri alınır, aşmazsa %50'ye ve %100'e yayılır.

hat: derleme → birim → entegrasyon → hazırlık → üretimhatalı oran 0,30 · tohum 2
1 / 96
ci_cd.pypython
  1. import numpy as np
  2. rng = np.random.default_rng(4)
  3. HATA = 0.3 # hatalı commit oranı
  4. TUR = ['derleme', 'birim', 'entegre', 'saha'] # hata türleri
  5. YAKALAR = {'yok': [0, 0, 0, 0], # derleme, birim, entegr., hazırlık
  6. 'derleme': [1, 0, 0, 0], 'birim': [0, .85, .7, .5], # yakalama olasılığı
  7. 'entegre': [0, 0, .8, .5], 'saha': [0, 0, 0, 0]} # saha: testler görmez
  8. def canary(hatali): # 20 robot × 50 görev (%10)
  9. oran = 0.10 if hatali else 0.005
  10. return (rng.random((20, 50)) < oran).mean() < 0.02 # eşik %2
  11. uretim, geri = [], 0
  12. for c in range(14): # günün commit'leri
  13. tur = 'yok'
  14. if rng.random() < HATA:
  15. tur = rng.choice(TUR, p=[.25, .35, .25, .15]) # gizli hata
  16. if any(rng.random() < p for p in YAKALAR[tur]): # aşamalar sırayla
  17. print(c, tur, 'testte durdu'); continue # kırmızı: dur
  18. if not canary(tur != 'yok'): # %10 filoya çık
  19. geri += 1; print(c, tur, 'canary: geri'); continue # geri al
  20. uretim.append(tur) # %50 → %100
  21. print('üretim:', uretim, 'geri alma:', geri)
  22. assert all(t == 'yok' for t in uretim) # hatalı sürüm üretimde yok

Sahnedeki her sayı, aynı algoritmanın tarayıcında yapılan gerçek çalıştırmasından gelir (sabit tohum, her seferinde aynı sonuç). Python kodunu kendi bilgisayarında çalıştırırsan rastgele başlangıçlar farklı olacağı için sayılar biraz değişebilir.

Bu dersin kodu verisini kendi içinde üretir; indirilecek dosya yok. Kodu yine de aşağıda tarayıcında çalıştırabilirsin.

Kodu tarayıcıda çalıştırPython · NumPy · matplotlib · Pyodide

Python ve NumPy bu sayfada, tarayıcında çalışır (Pyodide). Kodu değiştirip yeniden çalıştırabilirsin; dersin veri setleri çalışma klasöründe hazır. Kod matplotlib kullanırsa grafikler çıktının altında görünür, yazdığı dosyalar (ör. egitim_gecmisi.csv) indirilebilir.

ci_cd.pypython

Çıktı

Çıktı burada görünecek.

Nasıl çalışır

  1. Sürekli entegrasyon (CI): her commit ana depoya girer girmez derlenir ve testlerden geçer; hata, yazıldığı gün bulunur.
  2. Her aşama bir eleğe benzer: derleme sözdizimi hatasını kesin yakalar, birim ve entegrasyon testleri mantık hatalarının çoğunu yakalar. Bir aşama kırmızıysa commit orada durur, sonraki aşamalara gitmez.
  3. Sürekli teslim (CD): testi geçen sürüm kendiliğinden yayılır ama kademeli: önce %10 (canary). Canary robotlarındaki hata oranı eşiği aşarsa sürüm geri alınır.
  4. Testlerden kaçan hata bile tüm filoya ulaşmaz: yalnız 20 robot kısa süre etkilenir.
  5. Şunu dene: hatalı commit oranını 0,6'ya çıkar; kırmızı kutular artar ama üretime yine yalnız hatasız sürümler çıkar. Tohumu değiştir, saha hatasının canary'de geri alındığını gör.

Neden önemli

Otonom araç, drone ve depo robotu şirketleri yazılımı haftada birçok kez günceller; tek bir hatalı sürüm tüm filoyu durdurabilir. Bu yüzden simülasyon testleri, donanımlı test tezgâhı (HIL) ve canary dağıtım standarttır; geri alma düğmesi de otomatik olmalıdır, çünkü gece 3'te kimse uyanık değildir.

ESOF 323, 11. hafta: robotlarda derin öğrenme →
Esc
  • PanelAna sayfaSayfa
  • ModüllerTüm modüllerSayfa
  • ParçalarParça ansiklopedisiSayfa
  • Mühendislik yoluBüyükler için robotik: 128 parça, 7 seviyeSayfa
  • Robotik dersi (ESOF 323)Üniversite robotik dersi, 14 haftaSayfa
  • Drone dersiBüyükler için: parça, simülasyon, yazılım; 10 üniteSayfa
  • Blok atölyesiSerbest blok programlamaAraç
  • Devre laboratuvarıSanal Arduino ve devreAraç
  • Robot arenasıSanal robot sürüşüAraç
  • OyunlarBloklarla 8 öğretici oyunAraç
  • Mikro Kart atölyesiSanal LED kartı bloklarla programlaAraç
  • Robot atölyesiMikro Kart'ı robota tak, bloklarla görev yapAraç