Deploy automat cu Git

Urăsc să mut fișiere pe ftp. Este unul dintre cele mai enervante task-uri de care pot avea parte! Dacă ai acces SSH și CGI-BIN poți face următoarea chestie:

  1. Faci un fișier, să-i zicem cgi-bin/update_proiect.sh și îi dai un chmod 755;
  2. În acest fișier adaugi:
    #!/bin/sh
    printf "Content-Type: text/plain\n\n"
    echo "$(cd ../nume_proiect && git pull origin master)"
    
    
    # NOW=$(date +"%b-%d-%y@%T")
    # echo "$(cd ../nume_proiect && git archive --format zip --output publish/nume_proiect-$NOW.zip master)"
    

    Partea a doua este necesară dacă ai nevoie să creezi o arhivă cu fișierele (pentru clienți care sunt mai non-tech). Dacă nu vrei câte o arhivă pentru fiecare versiune, elimini particula -$NOW din ultima linie.

  3. Faci un cont pe bitbucket. Și un repo privat;
  4. În panoul de administrare al repository-ului te duci la services și alegi POST din dropdown;
  5. În căsuță apărută introduci URL-ul site-ului tău (de ex: https://iamntz.com/cgi-bin/update_proiect.sh)

Cam atât. De fiecare dată când faci push, serverul va fi actualizat. Există un delay de câteva secunde, dar este mai bine decât să lucrezi prin FTP, nu? :)

Poți adăuga mai multe servere pe bitbucket (test, producție) și să faci pull de pe branch-uri separate.

17 Comentarii to “Deploy automat cu Git”

  1. Interesant, mai ales pentru mine, care acum încep să înțeleg care-i șpilul cu SVN și GIT și altele asemenea. :)

    Întrebare: tu folosești cont privat de github sau ai un server al tău, setat cum vrei?

  2. Staicu Ionuț-Bogdan

    @Bogdan: eu am un VPS de la mxhost pe care rulez gitlab (care are și el niște hooks asemănătoare). Pentru ultimul proiect am încercat bitbucket pentru că, din motive necunoscute mie (și din lipsă de timp pentru a-i da de cap), gitlab a refuzat să funcționeze corect.

    Dacă ai de ales între VCS-uri îți recomand ceva distribuit (git, bazaar, mercurial).

  3. Poti adauga

    IF [ ! -d "nume_proiect" ]; then cd .. && git clone git@ bitbucket.org:user/nume_proiect.git;
    

    pentru a clona automat proiectul. Se pot adauga variabile care preiau de la argumente numele proiectului.

  4. Și în mod automat avem în nume_proiect directoriul .git unde putem vedea toate sursele accesibile public în moment ce nume_proiect e accesibil.

    Direcția corectă:

    cd "$(dirname "$0")/"
    git fetch origin production
    git reset --hard HEAD
    git checkout -q production
    git pull -q
    
    rsync --exclude ".git/" --delete -aq . "destination"
    
  5. incearca phpstorm, stie sa faca automat deploy (dupa fiecare commit, indiferent de ce vcs folosesti) prin orice protocol ai tu chef (ssh, sftp, ftp etc.)

  6. Staicu Ionuț-Bogdan

    @Dan: nu te aștepți să încerc un editor doar pentru că știe să facă deploy, nu? :)

  7. E cel mai misto IDE pe care l-am incercat, dar daca esti asa conservator nu-l incerca :)

  8. Staicu Ionuț-Bogdan

    Nu ma înțelege greșit, nu zic că e un IDE slab. Știu fani webstorm – omologul pentru JS & co – care mie mi-ar fi mult mai util decât phpstorm; chiar și mie îmi plac anumite funcționalități, doar că nu a reușit să mă convingă :)

  9. Blana. E exact ce-mi trebuia :D

  10. Ai idee cum pot face debug?
    daca rulez sh cgi-bin/update_proiect.sh e totul ok dar POST-ul din bitbucket nu pare sa mearga. Sugestii?

  11. Staicu Ionuț-Bogdan

    Andrei, din păcate, codul din articol reprezintă tot ce știu eu despre perl (sau chiar mai mult, având în vedere că a fost copy/paste din alte părți :D ).

    Dacă rulezi din browser, ce zice? Sau… zice ceva?

  12. Multumesc de raspuns.
    Din ce am observat prin loguri e vorba de eroarea de mai jos ce tine de permisiuni.

    error: cannot open .git/FETCH_HEAD: Permission denied

  13. Staicu Ionuț-Bogdan

    Aha!, deci e o chestie de permisiuni.

    Ai putea încerca următoarea chestie:
    1) pui în scriptul perl comanda de clonare (git clone git@ssh....)
    2) rulezi scriptul din browser
    3) ar trebui să meargă.

  14. Din pacate nu.
    Acum am eroarea de mai jos iar path-ul de la .ssh nu e corect.

    Host key verification failed.
    Could not create directory '/wrong/path/to/.ssh'.

  15. Staicu Ionuț-Bogdan

    Problema este că scriptul perl rulează sub alt user în browser. Caz în care te apuci să cauți un preot și un linux head. Doar ăștia doi te pot ajuta :D

  16. Mda, asta am realizat si eu.
    Urmez acum sfaturile de aici https://gist.github.com/1809044

    Ca idee sunt pe DV la Media Temple.

  17. sau se poate folosi o platforma separata de management deploy-uri gen webistrano (vine peste capistrano) – evident, e fezabil doar pentru proiectele mai mari unde release-urile chiar sunt release-uri, nu atunci cand s-a schimbat un height dintr-un css sau altele asemenea

Show trackbacks

Ți-a plăcut articolul? Lasă un comentariu!

You can insert code snippets using BBcode:
[js].[/js] [html].[/html] [php].[/php] [css].[/css]
You can also use some HTML tags:
<blockquote>.</blockquote> <code>.</code> <a href="">.</a> <strong>.</strong> <em>.</em>