Memanfaatkan Git Hook untuk Auto Deploy

Pernah dengar istilah CI/CD pada modern software development? ya, saya juga baru-baru ini baca 😆. Katanya dengan teknologi ini, tahapan proses deployment suatu product dapat dengan mudah dilakukan hanya dengan satu aksi, 😍 wow. CI/CD berarti continuous Integration atau continuous delivery / deployment[1]. Teknologi ini memungkinkan otomatisasi product deployment seperti merging, testing hingga push production.

Bagi pemula seperti saya 😄 , sebelum jauh memahami dan mengimplementasikan CI/CD, ada konsep dasar yang bisa dijadikan tahapan pembelajaran, yaitu dengan memanfaatkan git hook untuk deploy suatu project atau software product.


Bagi yang belum mengetahui git hook, ada dua jenis git hook, yaitu client-side hook & server-side hook[2]. Hook seperti sebuah event atau aksi yang kita butuhkan berjalan otomatis bergantung pada beberapa kejadian/event pada lingkungan git project kita. Pada tulisan ini kita akan coba contohkan server-side hook, apa itu? yaitu hook yang berjalan pada sisi remote dan cenderung berjalan pada proses penerimaan push di remote, sedangkan client-side itu sebaliknya. Langsung saja yuk kita coba.

saya asumsikan :

  • memiliki dua branch, yaitu master & dev
  • tulisan ini mencontohkan project php (yang tidak membutuhkan build/compile) sebelum deploy.

Pada server, kita buat bare repo & siapkan hook:

:~$ mkdir produk.git && cd produk.git
:~/produk.git$ git init --bare
:~/produk.git$ touch hooks/post-receive

Kita telah buat file bernama post-receive di dalam folder hooks/ pada git remote ubuntuserver3. Jangan lupa tambahkan execute permission dengan chmod +x hooks/post-receive . lalu di bawah ini adalah isi dari file post-receive.

#!/bin/bash
echo '--- --- --- --- --- --- --- --- --- --- ---'
echo 'Deploying site...'
echo '--- --- --- --- --- --- --- --- --- --- ---'

while read oldrev newrev refname
do
    branch=$(git rev-parse --symbolic --abbrev-ref $refname)

    # Master Branch
    if [ "master" == "$branch" ]; then
        git --work-tree=/var/www/html/produk checkout -f $branch
        echo 'Changes pushed to production site'
    fi

    # Development / Testing Branch
    if [ "dev" == "$branch" ]; then
        git --work-tree=/var/www/html/produk_test checkout -f $branch
        echo 'Changes pushed to test site'
    fi
done

echo '--- --- --- --- --- --- --- --- --- --- ---'

post-receive adalah sebuah file hook yang dijalankan ketika sebuah repo berhasil di push pada remote repo[3] (serve-side hook). Penjelasan dari script di atas adalah hook ini akan menelusuri setiap branch yang telah di push dan memilah apabila branch merupakan master, maka repo akan di checkout pada alamat work-tree production, dan sama hal nya dengan branch lain sesuai keinginan kita.

Pada local git project kita tambahkan alamat git remote server kita. Alamat bare git yang telah kita siapkan post-receive hook-nya seperti di atas.

:/var/www/html/produk$ git remote add ubuntuserver3 "ssh://username@server/~/produk.git"
#ubah nama dan alamat sesuai kebutuhan anda

Lalu ceritanya setelah codingan anda sampai pada checkpoint yang cukup atau target harian anda selesai, dan commit dilakukan maka kita coba push repo kita.

git push hook

Terlihat bahwa hal ini dapat memudahkan kita untuk mengirimkan update source code kita pada server testing atau production tanpa perlu repot copy-paste manual pada server. Mudah bukan? 😎

Tambahan

Bila ingin lebih otomatis lagi, kita gunakan ssh key antara server dan komputer kita agar setiap push tidak perlu password.


Begitulah pemanfaatan git hook untuk deployment project kita. Bila ada kritik dan saran boleh tuangkan saja di komentar. Bila tulisan ini bermanfaat bagi anda, bantu share ya.

Saya cukupkan sesi tulisan ini. Terima kasih sudah berkunjung.
#staypositive

Ciao!


Sumber:


547 Words

2018-12-29 01:52 +0000

comments powered by Disqus