System Deploymentu współpracujący z naszym repozytorium to jedno z najlepszych rozwiązań dla rozwijania strony internetowej albo aplikacji www. Znam dwa możliwe sposoby na wdrożenie tych metodyk pracy. Pierwszym jest posłużenie się już istniejącym narzędziem do tego, jakim jest deployhq.com. Tworzymy nowy projekt, konfigurujemy go z naszym repozytorium i za pomocą jednego przycisku wysyłamy aktualne zmiany na FTP. Należy zwrócić uwagę na to, że nie są kopiowane wszystkie pliki, tylko commity od ostatniego deployu. Jest to niewątpliwie ogromna zaleta tego serwisu.
Rozwiązanie bazujące na hook`ach Gita
Drugim rozwiązaniem jest napisanie hooka w naszym repozytorium, który np. przy push`u będzie kopiował pliki na wskazany serwer.
W pliku repo/hooks/post-receive:
#!/bin/sh while read oldrev newrev ref do branch=`echo $ref | cut -d/ -f3` if [ "master" == "$branch" ]; then git --work-tree=/home/user/public_html/testdb/ checkout -f $branch #scp -r -P 21 -p "password123" /home/user/files_from/ user@host:/home/user/files_to/ scp -r -P 22 -i /path/to/private_key /home/user/files_from/ user@host.pl:/home/user/files_to/ echo 'Changes pushed live. Deploy OK.' fi done
Do kopiowania plików na serwer wykorzystuje SCP, ponieważ oferuje bezpiecznie logowanie poprzez SSH. Flaga -r oznacza, że kopiujemy całą zawartość katalogu „files_from” łączenie z katalogami zagnieżdżonymi. Warto również podać port ustawiając flagę -P (duża litera, bo mała oznacza hasło).
Opcja z hasłem została zakomentowana, gdyż, jest to mało bezpieczna metoda. Do połączenia wykorzystamy parę kluczy. Po fladze -i podajemy ścieżkę do klucza prywatnego, dzięki któremu uzyskamy dostęp do serwera docelowo. Jak wygenerować poprawnie klucze jest opisane tutaj. Na końcu podajemy już ścieżkę do folderu, który chcemy przetransferować oraz miejsce na serwerze docelowym, do którego mają trafić pliki.
Źródła i linki:
https://stackoverflow.com/questions/1894347/how-to-upload-ftp-files-to-server-in-a-bash-script
http://kb.rootbox.com/generowanie-kluczy-ssh-rsa/