Git ile Basit Deployment

SCM (Source Control Management) araçları arasında Git hızla popülerleşti ve popülerliğini arttırmaya devam ediyor. Bununla birlikte farklı ihtiyaçlar da ortaya çıkıyor. Örneğin yazdığınız kodun otomatik olarak deploy edilmesi gibi.

Aşağıdaki çok basit script tam olarak da bunu yapıyor. Gerçekte production ortamlarında aynen kullanılacak bir script değil ama en azından fikir vermesi açısından gayet net ve açık.

Post Receive Hook

Hooklar nasıl yaratılırlar, nasıl çalışırlar öğrenmek için (http://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks) adresine bakabilirsiniz.

post-receive hook herşey bittikten sonra çalışır ve genellikle mail atmak için, continuous integration sunucusunu tetiklemek için veya ticket sisteminde güncelleme yapmak gibi aksiyonlar için kullanılır.

Bizim örneğimizde kodlar production isimli branch'a push edildikten sonra tanımlanmış sunucuya bağlanıp, o sunucu üzerindeki git dizinde git pull komutunun çalıştırılmasından ibaret.

#!/bin/sh

LIVE_HOST="myhost.net"
DOC_PATH="/var/www/html/"

read oldrev newrev refname
if [ $refname = "refs/heads/production" ]; then
    echo "===== YOUR CHANGES DEPLOYING TO LIVE HOST  ====="
    echo " HOST: $LIVE_HOST"
    echo "------------------------------------------------"

    # run git pull on the remote server.
    ssh $LIVE_HOST "git --git-dir=$DOC_PATH/.git --work-tree=$DOC_PATH pull"

    echo " Deployment Completed Successfully."
    echo "================================================"
fi
Daha Güvenli Olması İçin

Çok basit şekilde deployment yapmak için pratik ve yeterli ama pek güvenli bir script değil. Aşağıdakiler yapılarak daha güvenli ve kullanışlı bir hale dönüştürülebilir.

  • document_root dışında başka bir dizinde git pull komutunu çalıştırmak,
  • Her deployment için yeni bir dizin oluşturmak,
  • git dizini içindeki dosyaları yeni dizine kopyalamak .git ve varsa başla gereksiz dosyaları silmek,
  • document_root dizinini sembolik link ile yeni oluşan dizine linklemek,

Bunlar daha da arttırılabilir. Yapınıza göre load balancer üzerinde enable-disable yapmak, web sunucuları restart etmek, notifikasyon göndermek gibi daha advance işler yapmak da mümkün.

Bu arada link olarak çalıştırmamızın sebebi ise hızlı rollback yapabilmek için.