Serwis stoi na brzegu sieci — nie ma maszyny, systemu do łatania ani puli aplikacji. Jest kod, baza i magazyn obiektów. Wdrożenie polega na wysłaniu paczki, nie na restarcie usługi.
Cztery z pięciu repozytoriów budują się i wdrażają same po pushu na główną gałąź. Piąte nie, i powód jest pouczający.
Jedno kliknięcie, którego nie da się zautomatyzować
Podpięcie automatycznego budowania wymaga zgody na dostęp do repozytorium, udzielanej w panelu. Zgody nie da się wystawić przez API — to celowe zabezpieczenie i trudno mieć o nie pretensje. Efekt jest jednak taki, że jedna instancja przez tygodnie wdrażała się ręcznie i regularnie zostawała w tyle.
npm run build
cd .output/server
export CLOUDFLARE_API_TOKEN=... CLOUDFLARE_ACCOUNT_ID=...
rm -rf ../../.wrangler/deploy
npx wrangler@latest deploy -c wrangler.jsonWniosek ogólniejszy: w każdym łańcuchu automatyzacji znajdzie się jeden krok wymagający człowieka. Warto go znać z nazwy, bo to on decyduje, ile naprawdę zaoszczędziłeś.
Czas wdrożenia jest nieprzewidywalny
Pierwsza wersja skryptu weryfikującego czekała stałe trzy i pół minuty. Działało, dopóki wdrożenie nie zaczęło raz trwać czterdzieści sekund, a raz osiem minut.
Twardy sleep jest zawsze złym rozwiązaniem: albo czekasz za długo, albo sprawdzasz stan, którego jeszcze nie ma. Zastąpiliśmy go odpytywaniem co pięć sekund z warunkiem wyjścia na zmianie identyfikatora wersji.
GET /accounts/<konto>/workers/scripts/<worker>/versions?per_page=1
-> result.items[0].metadata.created_on
# petla co 5-10 s, ZAWSZE z timeoutem i wyraznym komunikatem.
# Petla bez timeoutu to nie cierpliwosc, tylko blad.Weryfikacja na żywo, nie z logów
Log budowania mówi, że budowanie się udało. Nie mówi, że działa to, co miało zacząć działać.
Nie da się też sprawdzić wersji silnika po adresie z metadanymi — zwraca znacznik budowania, nie numer wydania. Jedyna wiarygodna metoda to pobrać stronę i poszukać w niej znanego ciągu z nowej funkcji.
curl --compressed -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" https://... \
| grep -a 'znany-ciag-z-nowej-funkcji'
# --compressed: odpowiedz workera jest skompresowana
# -A: bez User-Agenta filtr botow odsyla pustoTen drugi przełącznik kosztował mnie kiedyś pół godziny sprawdzania, dlaczego strona „nie ma treści". Miała. Po prostu nie dla mnie.