Deploy Git commits to FTP server

Fórumok

Üdv!

PHP web development-re használt IntelliJ IDEA-t szeretném koppra lecserélni open-source szoftverekkel, Linux oprendszeren. Az editor részére bőven elég VSCode, vagy Vim, ezzel nincs gond, MySQL-re DBeaver, ezek pipálva. Viszont a deployment feature-je nagyon szofisztikált és nehezen találok megfelelő alternatívát.

  • A workflow-om IDEA-ban:
  • Külön Git branch-ben megvalósítom amit kell
  • IDEA Git log-ban kijelölöm a teljes branch-et, pontosabban az azon belül módosult fájlokat
  • Deployment -> Sync with FTP server * A branch-ben módosult fájlokat feltöltés előtt össze tudom hasonlítani a szerveren lévő verziókkal
  • Ha valami miatt a szerveren van egy módosítás, amit a lokális fájlokban nincs jelen, akkor inplace tudom alakítani a kódot

A feltöltő felület így néz ki, csak nem könyvtárakat hasonlítok össze, hanem a branch-ben változott fájlokat: https://www.jetbrains.com/help/idea/comparing-deployed-files-and-folder…

Biztos vagyok benne, hogy ennél lenne jobb workflow is, de per pill ez működik. A kérdésem az, hogy miként tudom ezt megvalósítani egyéb software-ekkel?

Odáig eljutottam, hogy Linux-ban az FTP szerverhez úgy tudok csatlakozni, hogy az egy ugyanolyan könyvtárként jelenik meg a gépemen, mint bármely másik (gio mount ftp://.../), tehát parancssorból is elérem, így tudok rá script-et írni. Az is megvalósítható, hogy a branch-ben változott fájlokat összehasonlítsam a szerverrel:

for f in `git diff --name-only master...`; do
  remote_f=/run/user/1000/gvfs/ftp.../$f
  if ! ( diff -rq $remote_f $f ); then
    code --wait --diff $remote_f $f
  fi
done

Ez végigmegy a branch-ben változott fájlokon és összehasonlítja őket a szerveren levővel, inplace tudom módosítani a fájlokat. Már majdnem tökéletes, viszont valamikor csak ellenőrizni akarom, hogy az szerveren lévő fájlok nem-e újabbak, mint a helyiek, ez esetben felesleges a diff, csak ki szeretném jelölni, hogy fel akarom őket küldeni. Erre egy grafikus összehasonlító program (pl. Meld) megfelelne, viszont azok egyikénél se találtam olyan lehetőséget, hogy csak a megadott fájlokat hasonlítsa össze; vagy két fájlt, vagy két könyvtárat tudok megadni paraméterként, de nincs rá lehetőség, hogy egy fájllistát (a branch fájljait) hasonlítsa össze.

Tudtok erre megoldást?

Részben kapcsolódó kérdés

Mostanában ismertem meg a `gio mount`-ot és nagyon rugalmas megoldásnak érzem, hogy parancssorról is elérhető módon tudok kapcsolódni FTP-hez, SAMBA-hoz, egyéb cloud cuccokhoz, valamint hogy ezeket a könyvtárakat ugyan úgy tudom használni, mint bármely másikat. Annyi hátrányát látom csak, hogy

  • Kicsit macerás az elérési útvonal (/run/user/1000/gvfs/...), bár ez symlink-el megoldható, de úgy tűnik, mintha nem kifejezetten terminálos használatra tervezték volna
  • A GVFS lassabbnak tűnik, mint a natív FTP kapcsolat (Midnight Commander-ben tesztelve)

Vannak már modernebb alternatívái, vagy okés így, ahogy használom? Vagy terminálból hogy érdemes remote server-hez kapcsolódni?

Hozzászólások

Én inkább az lftp mirror módját nézném meg.

Mas modositgatja a szerveren a fileokat, vagy az is te vagy?

Ha nem te vagy egyedül akkor probald meg a tobbieket is rávenni hogy ugyan abba a git repoba dolgozzatok es a menjen a deployment automatikusan egy "deployment" branch-bol git hook segitsegevel, igy nem kellene ftp-vel szarakodni. 

Nalunk a következő valt be, git repon "production" branch kerül a szerverre. Master branch a development.

Mindenki lokalis forkon dolgozik es pull requesteket kuld a valtozasokkal.  Mielőtt pull requestet kuldesz természetesen local merge-t csinal mindenki es ott megoldja a forkja es a kozponti kod kozti eltereseket (merge conflict).

A deploymentet nalunk jenkins vegzi ahol a deployment branch post commit hook-ja triggereli a jenkins pipelinet. (Checkout production branch, copy production config files in place, aztan a "kesz" directory megy a szerverre)

 

De egyebkent nézz utána ci/cd temakornek.

Support Slackware: https://paypal.me/volkerdi

Rendesen a fejlesztő feature branch-én dolgozik, engedéllyel vagy vezető által megy development-be a commit. Onnan tervezetten a masterbe, ahonnan lehet user-teszteket csinálni. Prodba pedig másként tervezetten mennek a master commitot vagy developer cherrypick-ek. Ha bátor valaki, akkor onnan lehet autodeploy webhook-kal éles rendszerre. Bluegreen nem baj ha van, késlelteti az összeomlását.

Nagy mellennyel beszélek, de fel éve nem tudtam hogy ez létezik. 

Szerkesztve: 2021. 02. 07., v – 16:34

A fejlesztes a masteren megy, de ha pl valami kicsi bug van akkor azt lehet a production-be javitani anélkül hogy.mondjuk.a.felkesz uj fetaure-t kellene beolvasztani.

Egyebkent gogs-t használunk ugymond szegény ember githubja-kent :)

Support Slackware: https://paypal.me/volkerdi

A cégnek valami olyan konstrukcioja van ami 25 usert enged, de foggalmam sincs,hogy milyen egyeb korlat van meg, vagy van-e egyáltalán.

Gogs-t olyan projektre hasznalok amit a cegen belül kell hostolni. (Gitea jobbnak tűnik, de nekünk boven eleg a gogs)

Support Slackware: https://paypal.me/volkerdi

gitlab ce-t nézd meg szerintem.

zászló, zászló, szív

Ha van egy user, aki nem hajlando gitbe kommitolni: kommitold be te gitbe amit csinált, megjelölve, hogy onnan jött. Tehát a deployment állapota is egy branch legyen! Innentől ugyanazokkal az eszközökkel kezeled mint minden mást! Lokálisan git difftool -d, szerverre pedig gitlab, ami FOSS saját szerveren hosztolt github clone.

Szia!

Lehet felreertem a kerdesedet, de szerintem az a normalis, ha mindenki kulon branch-be dolgozik feature-onkent. Lehetoleg ugy, hogy egy commit egy dolgot csinaljon, de azt jol, vagy ha tobbet, akkor legyen atlathato changelog. Push elott lefutnak az automata tesztek, ha pedig minden klappol, akkor bemegy a biztosan mukodokepes kod a sajat branch-be. onnan meg ami tuti jo, az olvaszthato a main-be. Utana meg a main lehuzhato egy sajat gepre es git-ftp-vel eljuttathato a sajat szerverre. 2021-ben FTP-zni elegge gaz mondjuk szerintem.  

Udv.

Eddig nem tudtam, hogy gáz, ezért használtam FTP-t. :D Nem volt még más developer a cégnél, ezért eddig nem tudtam, mit csinálok rosszul, de igencsak úgy tűnik, hogy az FTP-s ökörködést el kell felejteni (mikor végre nagy nehezen a közelébe kerültem a saját megvalósításnak), helyette automata deploy-t kell használni, ez már tisztán látszik.

Az FTP vagy samba share mappakon való közös munkát mindenképp git-re cserélném, meg fogod szeretni hidd el. Én olyan szinten élvezem, hogy 20 percenként commit, 5 fájl esetén is 3 commit ha jelezni szeretném mi tartozik egybe.

A production deploy (egy tároló egy cel egy kolléga egy időpontban) mehetne akár ftp-vel de ha ott a git pull, akkor minek. Ehhez távolról elérhető git kell (nem office self hosted), de az egy idő után amiatt is kell hogy ne kelljen home office-bol állandóan vpn-ezni. 

Ertsd jol: vannak a celra alkalmasabb technologiak, amelyek vagy kevesebb beallitast igenyelnek, vagy automatizalhatok, vagy biztonsagosabbak.

Shared hosting eseten ez a video johet jol.
VPS eseten meg kismillio tool van. A teljesseg igenye nelkul:

Github Actions

Gitlab a DigitalOcean megkozeliteseben

Udv.