Príbeh z včerajška vlastne začal pokusom upgradovať Gitea z vetvy 1.14, ktorú som prevádzkoval – konkrétne verzie 1.14.7 v čase písania – na vetvu 1.15, respektíve presnejšie na verziu 1.15.4.
Upgrade na 1.15 som odkladal, pretože aj keď sa Gitea zdanlivo riadi sémantickým verzionovaním, alebo skrátene semver, kde zmena stredného čísla je považovaná za MINOR upgrade definovaný ako poskytovanie novej funkcionality spôsobom kompatibilným so spätnou kompatibilitou, upgrade nie je nikdy úplne bezpečná operácia. Ani keď sa zmení len tretia časť semver verzie, ktorá by mala obsahovať iba opravy chýb – riziko môže byť nižšie, ale stále existuje.
Riziko tu môže byť vyššie, keďže komunita za Gitea poskytuje backporty opráv do oboch vyššie uvedených vetiev – 1.14 aj 1.15, čo znamená, že obe vetvy sa líšia aspoň v jednom zásadnom aspekte, ktorý by mohol potenciálne narušiť funkčnosť.
Preto som váhal s upgradovaním skôr, keďže som nebol v naléhavej potrebe nových funkcií implementovaných vo vetve 1.15, hoci určite niekoľko z nich chcem vyskúšať. Na druhej strane, počas predchádzajúcich dvoch mesiacov vývoja som potreboval stabilné miesto na pushovanie commitov.
Upgrade čohokoľvek si vyžaduje čas (a zálohy!) #
Hoci môj VPS poskytuje snapshoty, nie sú automatické, čo je smutné. Ale aj keď sú automatické, interval môže byť jeden týždeň. To stačí na obnovu v prípade nejakého závažného problému, ale nestačí na zachovanie väčšiny kritických obchodných dát.
Uprednostňujem 12 alebo 24-hodinové inkrementálne zálohy, na ktoré väčšinou
používam starý dobrý rsync alebo restic. Rozhodol
som sa urobiť zálohu restic so štítkom a zároveň príkaz gitea dump.
Gitea prevádzkujem ako docker kontajner, takže som urobil aj dump, pre
istotu:
docker exec -it --user git gitea-server-1 /bin/bash
Teraz vnútri kontajnera prejdite k spustiteľnému súboru gitea:
cd /app/gitea
Pozor, nasledujúca operácia môže spotrebovať veľa úložného priestoru:
gitea dump --file gitea-dump.zip
exit
Skopírujte zálohu von z kontajnera a odstráňte ju z jeho vnútra:
docker cp gitea-server-1:/app/gitea/gitea-dump.zip .
docker exec -it gitea-cp rm /app/gitea/gitea-dump.zip
Teraz sú dáta obnoviteľné v prípade, že počas upgradu (alebo hneď po ňom) dôjde k poškodeniu.
Upgrade #
Upgrade Gitea je veľmi jednoduchý – v mojom prípade stačí zmeniť verziu v
docker-compose.yml a spustiť nasledovné:
sudo docker-compose up -d --build
Príkaz prebehol bez akýchkoľvek problémov a upgradovaná verzia Gitea po
niekoľkých hodinách používania nevykazovala žiadne problémy. Nezabudnite
odstrániť dumpy skôr, ako ich zachytí cron job restic!