Github, Webhook, Python

logo git

Dulu sih pernah riset tentang hook dengan git (baca: Git Hook). Pada kasus sebelumnya lumbung(repository) diunggah ke server private. Nah task kali ini lumbung kode sumber diunggah pada server publik, serupa github.com (atau lainnya semisal gitlab.com).

Untungnya github.com telah menyediakan fitur ini, dengan nama webhooks.

Beklah. Setelah cukup lama(sebulanan lebih) utik-utik mesin pencari, akhirnya menemukan titik terang dari lumbung ini dengan bahasa python. Mari kita praktek. Oh ya, cara ini menurut saya masih belum praktis, sementara gini dulu sembari nyari panduan lain.

Syarat:

  • Server IP Publik, OS bebas
  • Contoh repo yang mau dihook, dan dihosting pada github.com

Langkah (saya adaptasi dari web techarena51.com):

Di server:

  1. Clone repo yg mau dicoba, bebas.
    # cd /var/www/
    # git clone https://github.com/tuanpembual/tuanpembual.github.io.git tuan
    # cd tuan
  2. Salin file hook berikut
    # wget https://raw.githubusercontent.com/tuanpembual/Flask-Github-Webhooks-Handler/master/github-webhook.py hook.py
  3. Atur IP, sesuaikan dengan ip publik server, ganti port sesuai kebutuhan
    # vim hook.py
    app.run(host="YourIP", port=5001)
  4. Install python3.4, pyvenv dan pip jika belum terpasang
  5. Buat lingkungan python 3.4
    # /usr/local/bin/virtualenv-3.4 env
    # source env/bin/activate
  6. Pasang dependensi dengan pip
    # pip install Flask Jinja2 MarkupSafe Werkzeug autopep8 blinker itsdangerous pep8
  7. Jalankan ujicoba hook, kemudian tutup
    # python3 hook.py
    # (ctr+c)
  8. Tambahkan pengaturan di file .gitignore. Tambahkan hook.py dan env
    # vim .gitignore
    hook.py
    env
  9. Lakukan commit dan push ke upstream
    # git add .gitignore
    # git commit -m "add except"
    # git push origin master
  10. Jalankan hook lagi, dan sembari menuju web github
    # python3 hook.py
  11. Testing di konsole baru (next tty)
  12. Buka file readme (yang telah diubah melalui web tadi, apakah ada perubahan?)
    # cat README
  13. Next (G WAJIB). Hentikan hook, dan jalankan opsi di balik layar
    # (ctr+c)
    # python3 hook.py &
  14. Keluar dari mode lingkungan python, dan logout dari server (dengan tetap menjalankan service hook)
    # deactivate
    # exit

Di github:

  1. Buka alamat repo yang diclone tadi, dan pilih bagian pengaturan
  2. Aktifkan webhook, dan isi kolom dengan isian berikut
    Payload URL : Add “yourdomain.com/payload”
    Content type : Select json
    Secret : Add the same secret you used in your script to generate the HMAC hash.
  3. Simpan perubahan
  4. Edit repo dari web, semisal menambahkan isian file README dan commit
  5. Cek di server, apakah ada perubahan

Selamat mencoba-coba.
Ps: bisa tambahkan perintah “python3 hook.py &” pada cron juga

Dah, itu aja. Silakan tulis komentar jika ada pertanyaan.
Estu
yg lagi senewen.

Bacaan:
[0] http://techarena51.com/index.php/flask-github-webhook-handler/