Deploya kod med Git

När det är dags för att uppdatera din webbapplikation med ny kod så finns det lite olika sätt att gå till väga på. Använd Git och skicka din kod direkt till produktion istället för t.ex. FTP.

Om du har ordning och reda på din kodbas redan och använder Git så kan du enkelt skicka ut ny kod. En fördel är att olika praktiska saker som t.ex. rensa cache, starta om demoner, sätta rätt filrättigheter m.m görs automatiskt.

Anta t.ex. att du har ett Git-repo hos t.ex. GitHub eller BitBucket. Lokalt i din utvecklingsmiljö klonar du typiskt koden med:
$ git clone git@bitbucket.org:cloudnet/minwebbapp.git

När du klonat ditt repo så lägg till din server som ytterligare en remote som nedan:
$ git remote add live-stuff git@c0000.cloudnet.cloud:live.git

Du kan ändra, göra commit och push precis som vanligt, och när du är nöjd och vill deploya ut kod till produktion så skriv bara:
$ git push live-stuff master

Som svar får du något liknande som texten nedan. Lite olika säker körs beroende på om din applikation är Drupal, WordPress, Rails eller något annat.
Counting objects: 5, done.
...
remote: Executing pre hooks...
remote: Deploying commit fadcad37886c29b8d20788bd53ec900ee362545a to '/mnt/persist/www/docroot'...
remote: Setting permission...
remote: Executing post hooks...
remote: Reloading Apache2…
remote: Clearing Drupal cache...
To git@c0000.cloudnet.cloud:live.git

Vips, och den nya koden är på plats och cachen rensad. Självklart kan du lägga till egna hooks som gör lite magi om din applikation behöver det.

I Git kan du alltså ha flera remotes som du kan pusha till. För att lista remotes skriv:
$ git remote show
live-stuff
origin

origin är huvudrepot, i det här fallet BitBucket.

Glöm inte att pusha tillbaka dina ändringar till alla remotes bara, det är lätt hänt att de olika repona kommer i otakt annars. Om det händer så får du göra en merge för att få allt i synk igen.

Självklart kan man ha olika brancher i Git som deployar t.ex. en stagemiljö. Skapa branchen stage och kör en push. Nu ligger filerna under /mnt/persist/www/docroot_stage och du kan surfa in på stage.c0000.cloudnet.cloud.

Om du använder Jenkins, Bamboo eller t.ex. CircleCi och behöver hjälp med integration så kontakta oss! Vi hjälper gärna till.
– Magnus