Sziasztok
Olyan megoldást keresek - eddig nem igazán találtam - ami a saját GIT szerveremen lévő esemény/push után (Gitea - webhook-van)
valahogyan végre hajtaná a GIT PULL-t a szerveren és nem kellene SCP-vel feltöltenem a fájlokat vagy belépni és console-ban kiadni.
Próbáltam exec, shell_exec (előtte elmentettem a credentials-t) de nem működött, a "git status" lefutott.
Valami egy php fájlos megoldás lenne a jó - amit egyszer feltöltök/beállítok és utána csak meghívom a HOOK-al és - végzi a sync-et.
Bármi hasznos megoldás érdekel.
Köszi.
- 381 megtekintés
Hozzászólások
Jenkinst nézted? :) Pont ezekre van kitalálva és jól dokumentált, plusz ezt is tudod magad hostolni.
- A hozzászóláshoz be kell jelentkezni
Vagy TeamCity az is mehet saját infrán. De akkor már lehetne akar GitLab is ha az általa szállított CI/CD elegendő.
- A hozzászóláshoz be kell jelentkezni
CI/CD az amit keresel. Szerveren a git pull-t, scp-t, ftp-t es hasonlo dolgokat felejtsd el. Egy letunt kor kulcsszavai.
- A hozzászóláshoz be kell jelentkezni
+1
A git soha nem is volt deployment tool. Más kérdés, hogy az RPIn futó statikus bemutatkozó oldalát az ember mondjuk így frissíti. :)
- A hozzászóláshoz be kell jelentkezni
Miért git pullal? Szépen építs belőle egy verziózott, statikus tartalmat kiszolgáló nginx konténert, és azt helyezd ki :)
- A hozzászóláshoz be kell jelentkezni
Ha a git-et másik gépen hosztolod, és emiatt a hook-ot beállítani melós volna, akkor a szegény ember hook-ját is lehet használni: egyszerűen cron-ból futtatod mondjuk percenként a git pull parancsot az adott folderre és kész. Amikor nincs változás, akkor ez a művelet "szinte ingyen" van. Amikor meg kell, akkor az az egy perc az semmi. Én használok ilyet több helyen is többféle céllal, semmi baja. A git-et jelszó nélküli ssh kulcsosra kell beállítani, ezt meg tudod csinálni például githubon is, vagy saját git szerveren is nyilván.
Szerk1
Van Jenkins-es autobuild is beállítva, az is időzítő alapján nézegeti a git szervert, ott sincsen web hook beállítva.
De ha ragaszkodsz a hook-hoz, és a többiek tanácsaira sem tervezel hallgatni, miszerint Jenkins és egyebek legyenek használva, hanem sima szkriptet akarnál írni: a git hook az pont egy szkript, amit a "szerveren" (saját git szervert feltételezve pl gitosis vagy gitolite-tal megvalósítva), ahová pusholsz egyszerűen bele kell tenni a hooks folderbe, és le lesz futtatva. Ebben aztán meg kell oldani, hogy a git user tudjon szkriptet futtatni azon user nevében, akinél a PHP fut (pl egy user számára jelszó nélkül engedélyezett sudo update.sh, vagy hasonló, amibe meg beleírod, hogy su php, és azzal futtatod le a git pull-t). Tehát látható, hogy minden lépés egyszerű, de tökéletesre megcsinálni mégsem egyszerű, mert ugye egyik userről át kell menni a másikra.
Ha külön szerveren van, akkor olyat is lehet csinálni, hogy a hook-ba beírod, hogy wget https://myserver/jelszo/gitpull. A jelszó-szerű folderbe meg beteszed a gitpull.php-t, amiben lefuttatod a git pull-t. Ez már tényleg tákolás, és biztos sokan húznák rá a szájukat, de eseményvezérelt, egyszerű és működik.
Szerk2:
A fent leírtat tudja a github is, de ahogy látom csak vállalati előfizetéssel: https://docs.github.com/en/developers/webhooks-and-events/webhooks/abou…
Én még ilyet sosem csináltam, mert 1-5 perc közötti pollozás mindenre elég volt eddig nekem.
- A hozzászóláshoz be kell jelentkezni
A gitea-n lehet hook-ot csinalni, amibe olyan parancsot raksz, ami jol esik.
- A hozzászóláshoz be kell jelentkezni
Rossz felé indultál az úton, CI/CD a kulcsszó, például Jenkins tudja ezeket, de ha cserélsz Gitea-t Gitlab-ra, akkor abban is van komplett CI/CD, pipeline meg minden.
- A hozzászóláshoz be kell jelentkezni
Én tudom, hogy CI/CD lenne a tökéletes megoldás, Bamboo-t használok céges szinten.
Sok WEB hosting-nál nincs SSH és a GIT sem biztos.
Cron általában van illetve php az alap. Ezért gondolkoztam valami egyfájlos php megoldáson.
A Gitea egy TrueNas szerveren fut otthon oda raktam fel mellé a Jenkins-t. Tegnap próbálgattam, de sem a HOOK-ot nem látja és az FTP-feltöltés is kihagy fájlokat.. de ez lehet #TooStupidUser probléma is. Még nézegetem majd.
- A hozzászóláshoz be kell jelentkezni
Nos, ha nincs git, akkor a követekzőt tudod csinálni:
a Gitea-ból (megfelelő auth után persze), lehúzod a ZIP-et, ami a kódot tartalmazza, és felülírod vele az előző verziót.
De ez ugye nem fedi azt az esetet, hogy mi van, ha tröröltél egy file-t (a törlés ténye nem hajtódik végre), így én az alábbit csinálnám, ha tényleg egy PHP-s buta webhostingon kéne ezt megoldani:
- verziózottan, mappánként tárolni az egyes kiadásokat
- a legfrisebb mappára egy symlink mutat
- amikor meghívódik a webhook, akkor:
- letöltöd a ZIP-et
- létrehozol egy új mappát és oda kicsomagolod
- a kicsomagolt mappára állítod a symlinket
- Ha kell tárhely, akkor a régi mappát törlöd
Nem olyan bonyolult ezt leprogramozni.
- A hozzászóláshoz be kell jelentkezni
Ha a web szerveren nincsen SSH, akkor hogyan mennek rá a fájlok? (Nem ismerem a web hoszting szcénát, hallottam hogy régen a titkosítatlan FTP ment, de azt hittem mára ez már kikopott. Hogy nem törik rommá ezeket?)
Szerk: ezt visszaszívom, mivel pont a web szolgáltató oldal a buta, és pont a git szerver a sajátod, tehát pont a saját cuccodra kell az észt tenni. Ezt írtam előtte, ami hülyeség így utólag: (A hook-ot én elsőre elengedném és helyette időzített folyamatot csinálnék, ami kliens oldalon triggerelve folyton csekkolgatja, hogy van-e frissítés. Aztán ha úgy már megy, akkor esetleg megcsinálnám a hook-ot is. A git hook-nál a fájlt futtathatóvá tetted, ami a hook-ot futtatná? Ez volna az első ötletem, hogy miért nem fut le. Ha ez a saját szervereden fut, akkor tuti hogy meg lehet oldani a problémát, csak nagyon kell akarni és próbálgatni kell.)
Én elgondolkodnék ezen a ponton, hogy pure web hosztolás helyett mondjuk VPS-re költöztetnék mindent, és ott olyan git klienst telepíthetsz, amilyet csak akarsz. Aztán simán cron jobból indíthatod a git pull-t percenként, oszt kalap kabát.
- A hozzászóláshoz be kell jelentkezni
Attól, hogy a rajta futó script nem tud SSH kapcsolatot nyitni (mert nem elérhető a PHP scriptek számára SSH kliens bináris), SSH szerver futhat még rajta.
- A hozzászóláshoz be kell jelentkezni
A git hook (ami a git szerveren fut), meg a webhook (ami egy HTTP hívás egy másik szerverre) két tök külön dolog. Ő webhookot csinál, és ez teljesen járható út - mondjuk amikor a fő branchbe érkezik egy merge, akkor triggerelődik a webhook, ami elvégzi a frissítést.
- A hozzászóláshoz be kell jelentkezni
Én így tákoltam össze, tudom hogy vannak erre kész toolok (CI/CD) meg minden, de nekem gyorsan kellett "ideiglenesen".
Cronból fut percenként
if git remote show origin |grep -q "local out of date";then
echo "$(date) - Changed"
git pull
fi
Persze ennek már több mint egy éve és azóta is így fut hiba nélkül :D
- A hozzászóláshoz be kell jelentkezni
De ezt csak akkor tudod megcsinálni, ha a célgépen van git, amivel tudsz pullolni. Az OP egy olyan helyen szeretné ezt megoldani, ahol ez nem áll fenn.
- A hozzászóláshoz be kell jelentkezni
Kicsit ugyan elborult, de esetleg ilyesmi (nem használtam még): https://github.com/czproject/git-php? :)
Ahogy látom, git kliens ugyan kell neki, de ha a git status lefutott, akkor talán az van. Ezt ő proc_open-nel indítja, nyilván ha az le van tiltva, akkor nem lesz jó.
- A hozzászóláshoz be kell jelentkezni