[lwptoc]

Perhatian, artikel ini memuat banyak gambar, dan dua video dengan ukuran total 15 MB. Siapkan koneksi internet yang lancar 😇

Mengapa Diperlukan Otomatisasi Git ?

otomatisasi gitGit saat ini merupakan SCM (Source Code Management) paling populer. Fitur sangat lengkap, komunitas tersebar luas, referensi cukup kaya. Beberapa fitur yang ada, sangat mendukung kemudahan deployment aplikasi. Fitur seperti CICD, Webhook, Pipeline, akan sangat mendukung teman-teman developer dalam melakukan update aplikasi.

Aplikasi masa kini cenderung lebih besar, dan cenderung memiliki potensi update / patch cukup banyak. Sementara aplikasi-aplikasi ini biasanya digunakan dalam kondisi live (production mode). Belum arsitektur aplikasi jaman sekarang banyak yang menerapkan micro services, yang digunakan untuk memperingan beban aplikasi dengan cara memecah aplikasi tersebut berdiri sendiri-sendiri tiap bagiannya. Di aplikasi berjenis monolith juga tidak kalah tingginya potensi patch / update ini. Sementara proses git pull yang dilakukan dari sisi server sungguh akan membuat tambahan pekerjaan. Diharapkan dengan otomatisasi git ini  sekali push dari ranah client developer, seluruh aplikasi dapat segera terupdate, tanpa harus memberikan perintah pull manual dari server live.

Git dan Operasional Dasarnya

Git dirancang sebagai Source Code Management, atau control versioning. Bertujuan agar developer satu dan developer yang lain ini bisa bekerja bersama, tanpa khawatir bentrok atau saling timpa kode di sisi live atau production. Dengan Git, semua terkontrol, termasuk catatan siapa yang melakukan update. SCM selain Git antara lain : Merkurial, Subversion, CVS dan Fossil.

Git server diinstal pada semua komputer, dan akan berlaku sebagai repo server. Namun ada juga yang sudah lengkap dengan manajemen project ala Git, yaitu Gitlab. Gitlab tersedia dalam versi installer di https://about.gitlab.com/install/, ataupun versi cloud yang sudah siap digunakan secara free di https://gitlab.com.

Saat seorang developer melakukan coding di komputer PC nya, dia dapat memberikan perubahan pada repository, dengan perintah git add, dilanjutkan dengan git commit dan git push. Sedangkan jika telah siap, maka seorang engineer akan membantu melakukan git pull ke dalam server aplikasi. Git pull adalah menarik atau mengambil source code dari repository. Git juga menghandle masalah-masalah perbedaan mode deployment, dengan menggunakan branch. Misal branch develop, ataupun branch master. Tim dapat menentukan mode development atau mode production yang diupdate.

Otomatisasi Git dengan Git Auto Deploy

Ada banyak kerangka kerja pengembangan software yang ada selama ini, mulai dari Waterfall, Agile, Scrum, hingga yang paling baru ini adalah DevOps DevSecOps. Kerangka-kerangka kerja terbaru saat ini banyak digunakan untuk keperluan quick development, fast deployment, testing, monitoring dan bahkan sampai menangani reproduksi sebuah software. Karena kebutuhan yang cepat itu, maka dibutuhkan kerangka kerja cepat, dengan bantuan tool-tool untuk menjamin kecepatan kerja tersebut. Git hadir dengan menawarkan banyak hal untuk menjamin kecepatan kerja tersebut. Beberapa jenis otomasi yang disiapkan oleh Git antara lain seperti CI/CD (Continuous Integration / Continuous Delivery), Webhook dan juga Pipeline misal. Ada sih jenis automation tool di luar git, seperti Azure Devops, ataupun penggunaan Jenkins.

Otomasi Git yang kita ambil kali ini adalah jenis webhook. Sedangkan tool GitAutoDeploy itu kita ambil dari sebuah akun github https://github.com/olipo186/Git-Auto-Deploy. Sebenarnya ada di repository Linux. Namun sementara ini yang paket instal dari akun github tersebut dipandang lebih enak konfigurasinya. Inti dari arsitektur GitAutoDeploy ini adalah

  1. Server Deployment (aplikasi) diinstal GitAutoDeploy, dan menyalakan port HTTP/HTTPS pada port tidak standar. Pada konfigurasi default , diberikan port 9080. Path direktori deploy diarahkan dengan tepat.
  2. Pada gitlab pada project yang akan diotomasi, diberikan setting webhook, mengarah pada alamat URL gitautodeploy pada server Deployment. Tim penulis eCampuz saat ini menggunakan https://gitlab.com. Perhatian : Webhook hanya dapat disetting dengan akun yang memiliki hak sebagai Maintainers.
  3. Saat developer melakukan git push, maka Gitlab segera melakukan push perubahan pada server Deployment.

skema otomatisasi git

 

Intinya, Gitautodeploy ini nge-pull-kan aplikasi kita, dengan trigger adalah lecutan akses webhook dari Gitlab. Webhook dilecut oleh aktivitas push dari developer. Demikianlah proses otomatisasi git dengan gitautodeploy berlangsung.

Instalasi Gitautodeploy

Sistem Requirements

GitAutoDeploy berjalan dengan :

  • Operating System Linux (bisa yang lain juga, sejauh dapat diinstal Python). Tim eCampuz menggunakan Ubuntu 20.04
  • Python versi 2.7
  • Terjangkau dari sisi publik, untuk port-port yang dibuka GitAutoDeploy. Boleh IP local di balik NAT, atau IP local yang dapat dipublikkan dengan model tunneling
  • Memory CPU tidak ditentukan. Namun pada server cloud atau VPS masa kini, biasanya selalu sudah mencukupi.
  • SSH-Key untuk komunikasi antara server dengan repo

Q : Lho bang, kalau pakai server hostingan Plesk atau cPanel bisa dipasang otomatisasi Git nggak ?
A : Sementara ini tidak bisa bung, kecuali bisa kontak adminnya hehehe..

Membuat SSH Key

Dalam proses otomatisasi git, diharapkan tidak ada aktivitas interaktif memasukkan user password secara manual. Salah satu solusinya adalah dengan menggunakan SSH Key. SSH Key adalah salah satu cara agar proses SSH kita berjalan tanpa password ke suatu tempat. Karena server repo Gitlab tidak mengijinkan adanya password SSH, maka kita perlu membuat ssh key tersebut. SSH Key ada dua macam :

  1. Private Key : ini harus tetap ada di server, tidak boleh dishare. Ini seperti kunci yang kita pegang. Biasanya bernama id_rsa
  2. Public Key : Bagian ini boleh disebar. Ini diandaikan seperti gembok. Kita akan mendaftarkan kunci gembok kita ke gitlab, agar kita boleh membuka ke sana. Biasanya bernama id_rsa.pub

Mari kita buat di sisi server deployment kita dengan perintah : ssh-keygen. Enter-enter saja jika memang tidak memerlukan passphrase.

ssh-keygen

Proses itu akan membuat direktori .ssh/, dan berisi file id_rsa, dan id_rsa.pub. Selanjutnya bukalah halaman Gitlab sobat kampus pada Profile >> Preferences >> SSH Key, seperti pada video singkat ini :

Dalam video singkat tersebut, Public Key SSH dicopy dan dimasukkan ke dalam daftar SSH Key Gitlab. Selanjutnya server kita dapat melakukan pull, clone tanpa password ke Gitlab.

Instalasi Python, Pip dan Module lockfile di Deployment Server

Pastikan bahwa repository Linux anda sudah update.. Pip adalah tool dari python yang memiliki fungsi mengambilkan module-module yang sudah disediakan oleh Python. Python dan pip biasanya tersedia multi versi dalam sebuah server. Mari kita mulai. Ingat, ini diinstall di server yang akan menjadi wadah instalasi aplikasi ya.. (Deployment Server)

Untuk OS Linux Ubuntu

sudo apt update

sudo apt install python python2.7

curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py

sudo python2.7 get-pip.py

sudo pip2.7 install lockfile

Untuk OS Linux CentOS

sudo yum install python27 python2-php

sudo pip2.7 install lockfile

instal pip otomatisasi git

Kira-kira berikut tampilan gambar yang ada. Python akan segera menginstalkan module yang dimaksud beserta dengan dependencies yang diperlukan.

Menyiapkan Repository di Gitlab, Local dan Direktori Instalasi di Server

Sudah biasa kan membuat repo di Gitlab? Kali ini akan diberikan contoh pembuatan repo Gitlab dengan nama project : ecampuz_dummy.

otomatisasi Git create project

Project kosong ini, akan kita clone ke komputer local kita (laptop misal), agar lokasi direktori kita sekaligus terinisiasi atas git tersebut. Proses clone dapat kita pilih, menggunakan

ssh git@gitlab.com:bimosaurus/ecampuz_dummy.git ,

atau menggunakan

https://gitlab.com/bimosaurus/ecampuz_dummy.git

Oke untuk pertama dan untuk lokal, saya gunakan yang https://gitlab.com/bimosaurus/ecampuz_dummy.git. Memakai http tetap akan ditanya user password.

otomatisasi git, clone
First Clone Local PC / Laptop

Berikutnya, kita juga clone dong ke server. Tapi dengan URL repo berjenis SSH.

otomatisasi git ssh key
First Clone Server

Perhatikan, jika server kita pertama kali clone di git@gitlab.com, maka kita akan ditanyakan tentang authenticity of host, di server kita. SSH memang seperti itu. Ketik saja yes. Setelah itu proses git clone akan berlangsung. Pertanyaan yes itu hanya akan saat itu saja. Setelah teregister, nanti akan lebih mudah. Tenang, hanya server kita saja yang boleh melakukan ssh tanpa password itu, sejauh private key tidak kecolongan.

Ya, struktur local – repo – server kita sudah siap. Segala perubahan di local, jika dipush ke repo, dan dipull di server, akan memberikan perubahan di server.

Instal Gitautodeploy untuk Otomatisasi Git

Direktori instalasi GitAutoDeploy bisa diletakkan di mana saja kita suka. Kebetulan kalau saya, saya letakkan di /home/bimo saja. Mari kita ambil clone Gitautodeploy milik si orang selow Ollipo ini.

git clone https://github.com/olipo186/Git-Auto-Deploy.git

Kira-kira prosesnya seperti berikut :

instal gitautodeploy

Setelah terclone dengan baik, bukalah dengan perintah cat atau lainnya untuk melihat config.json.sample. Di sana akan ada konfigurasi yang kita butuhkan. Konfigurasi tersebut isinya adalah :

  1. Port yang dibuka untuk gitautodeploy
  2. Lokasi direktori git copy
  3. Lokasi log file. Gak usah kuatir, apapun yang terjadi pada gitautodeploy ini terlogging dengan baik
  4. Lokasi pid file
  5. Alamat repository
  6. Branch yang akan dieksekusi

Berikut contoh konfigurasi yang kami pasang, dan dituliskan dalam config.json.

{
  "log-file": "~/gitautodeploy.log",
  "log-level": "INFO",

  "global_deploy": [
    "echo Deploy started!",
    "echo Deploy completed!"
  ],

  "pid-file": "~/.gitautodeploy.pid",
  "http-enabled": true,
  "http-host": "0.0.0.0",
  "http-port": 59080,
  "global_deploy": [
    "echo Pre-deploy script",
    "echo Post-deploy script"
  ],
  "repositories": [
    {
      "url": "git@gitlab.com:bimosaurus/ecampuz_dummy.git",
      "deploy": "echo deploying",
      "branch": "master",
      "remote": "origin",
      "path": "/home/bimo/app/ecampuz_dummy.git",
      "filters": [
        {
          "object_kind": "push",
          "ref": "refs/heads/master"
        }
      ]
    }
  ]
}

Nah masakan kita sudah siap untuk ditest. Tapi nanti dulu…. Kita siapkan webhooknya.

Memasang Webhook pada Gitlab

Lokasi setting Webhook pada Gitlab adalah ada di halaman Setting, pada dashboard project aktif kita. Di tempat saya terletak di https://gitlab.com/bimosaurus/ecampuz_dummy/-/hooks. Tentu berbeda di tempat sobat kampus semua.

Kira-kira begini halamannya :

webhook gitlab

Sobat kampus dapat men-scroll turun, dan dapat disimpan konfigurasi webhook tersebut, dengan klik Add Webhook. Setelah itu akan muncul kolom Test Webhook di bagian bawah. Testing ini akan berjalan jika gitautodeploy kita di server telah aktif.

test webhook otomatisasi git

Menjalankan Gitautodeploy

Menjalankan gitautodeploy di server cukup mudah. Untuk pertama kali menjalankan boleh menggunakan ini dulu:

python2.7 -m gitautodeploy --config config.json

Jangan lupa, perintah ini dijalankan pada direktori instalasi GitAutoDeploy yang sudah sobat kampus clone tadi.

Jika sukses, munculnya adalah :

2021-05-03 16:40:30,026 [INFO ]  Initializing repository /home/bimo/app/ecampuz_dummy.git
2021-05-03 16:40:49,545 [INFO ]  Branch 'master' set up to track remote branch 'master' from 'origin'.
2021-05-03 16:40:49,546 [INFO ]  Your branch is up to date with 'origin/master'.
2021-05-03 16:40:49,546 [INFO ]  Reset branch 'master'
2021-05-03 16:40:49,591 [INFO ]  Repository /home/bimo/app/ecampuz_dummy.git successfully initialized
2021-05-03 16:40:49,623 [CRITI]  Unable to activate SSL: File does not exist: /home/bimo/cert.pem
2021-05-03 16:40:49,625 [INFO ]  Listening for connections on http://0.0.0.0:59080

Ditest network tentu juga sudah muncul, kita test dengan netstat. Jika statenya sudah LISTEN berarti sudah sukses.

cek netstat
Jika dari sisi network sudah sukses, bisa dicoba untuk testing dari webhook.

test webhook

Silakan klik salah satu test, dan lihat apa yang terjadi pada gitautodeploy yang sudah diinstal.

testing sukses gitautodeploy

Bagian yang diblok putih itu adalah merupakan log yang muncul, setelah dilakukan testing pada halaman webhook Gitlab.

Setelah sukses, sobat kampus dapat melakukan terminate (mematikan) gitautodeploy yang sekarang aktif dengan perintah Ctrl C saja. Selanjutnya disiapkan running gitautodeploy untuk berjalan sebagai daemon (dibalik layar). Untuk menjalankan hal itu dapat digunakan perintah berikut :

python2.7 -m gitautodeploy --daemon-mode --quiet --config config.json

Lho bagaimana dengan log? Untuk log, sobat kampus tetap bisa membaca dengan perintah :

tail -f ~/gitautodeploy.log

Sepertinya, otomatisasi git kita telah siap. Nah, untuk memastikan, bagaimana jika kita testing push pull? Silakan perhatikan video yang terlampir ini. Di sini ada tiga (3) buah konsole aktif :

  1. konsole local PC saya
  2. konsole server untuk tail -f ~/gitautodeploy.log
  3. konsole ls -l yang saya panjar untuk /home/bimo/app/ecampuz_dummy

Jadi, percobaan kita untuk memasang gitautodeploy sebagai otomatisasi git telah sukses. Dengan demikian proses development dan delivery telah dapat langsung dilakukan dengan otomatis. Konfigurasi config.json sendiri sebenarnya juga sudah lengkap, termasuk telah disiapkan untuk berbagai macam branch. Sehingga kita dapat saja melakukan push branch tertentu saja. Namun direktorinya juga perlu disiapkan.

Siapa yang Seharusnya Menginstal Otomatisasi?

Di era sekarang, automation sudah sangat dibutuhkan. Pada beberapa perusahaan otomatisasi ini dibuat oleh para Sysadmin, System Engineer, SRE (Site Reliable Engineer) ataupun DevOps Engineer. Otomatisasi git ini akan sangat menghemat waktu para engineer. Waktu yang semula digunakan untuk melakukan pekerjaan yang bersifat repetitif, akan dialihkan untuk kembali memproduksi hal-hal yang sifatnya dapat mendukung otomatisasi.

Kampus perlu? Tentu. Kampus masa kini dipaksa untuk online oleh pandemi. Sekolah juga. Sehingga layanan aplikasi harus selalu siap. Sementara, potensi adanya update, perubahan di aplikasi-aplikasi layanan-layanan publik seperti itu cukup tinggi. Karena kadang SDM yang ada juga terbatas, maka hal-hal yang repetitif dapat diserahkan pada mesin, manusianya kembali berkreasi melakukan hal yang tidak dapat dilakukan oleh mesin.

Gitautodeploy ini hanyalah salah satu solusi alternatif untuk otomatisasi git, agar proses integrasi dan delivery dapat dilakukan dengan lebih cepat, dengan mengurangi aktivitas manusia.

Nah… sudah mencoba hingga sukses? Selamat ngoprek, sobat kampus.