Salah satu hal yang paling merepotkan ketika mendevelop sebuah aplikasi PHP / Node JS adalah ketika masuk pada tahap deployment ke server untuk testing ke tim atau release ke publik. Secara garis besar, hal yang harus dilakukan adalah sebagai berikut:
- Programmer melakukan commit dan push pekerjaan ke git repository (Gitlab).
- Login SSH ke server test / production
- Berpindah ke directory program diinstall
- Melakukan git pull untuk mengupdate code dari git repository
- Jika diperlukan, melakukan composer install atau npm install atau perintah perintah lainnya sebagai langkah untuk update aplikasi
Langkah langkah di atas sepertinya terlihat sedikit dan mudah untuk dilakukan. Akan tetapi jika perubahan code yang terjadi cukup banyak, maka melakukan rutinitas di atas akan sangat menyita waktu. Hal tersebut ditambah dengan ada programmer lain yang ternyata melakukan perubahan code di waktu yang hampir bersamaan. Untuk mengatasi hal seperti ini, maka deployment perlu dibuat secara otomatis menggunakan metode CI/CD (Continuous Integration / Continuous Deployment)
Dikarenakan saya menggunakan Gitlab sebagai server untuk Git Repository, maka kali ini akan saya jelaskan cara setting Gitlab CI/CD untuk deployment code ke server tanpa harus login ke server secara manual.
- Pada menu project, masuk ke menu Settings -> CI /CD -> Variables.
- Input beberapa variable baru
- SSH_PRIVATE_KEY
- SSH_USERNAME
- SSH_URL
- Berpindah ke menu Build -> Pipeline Editor.
- Pilih branch yang akan kita tambah / update file .gitlab-ci.yml
- Saya menggunakan branch staging pada contoh kali ini
- Lalu masukkan konfigurasi di bawah ini, copas ke dalam editor yang muncul di halaman Pipeline Editor
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
image: alpine:latest deploy_staging: stage: deploy environment: name: staging before_script: – ‘command -v ssh-agent >/dev/null || ( apk add –update openssh )’ – eval $(ssh–agent –s) – echo –e “$SSH_PRIVATE_KEY” | tr –d ‘\r’ | ssh–add – > /dev/null – mkdir –p ~/.ssh – chmod 700 ~/.ssh – ssh–keyscan $SSH_URL >> ~/.ssh/known_hosts – chmod 644 ~/.ssh/known_hosts script: – ssh $SSH_USERNAME@$SSH_URL “cd /var/www/project && git checkout staging && git pull origin staging && exit” only: – staging |
Untuk melakukan uji coba apakah konfigurasi berhasil, dapat melalui menu Build > Pipelines > Run Pipelines.
Setelah konfigurasi yang kita buat selesai dijalankan, maka nantinya akan menampilkan hasil yang menunjukkan sukses atau tidaknya beserta detail proses apa saja yang dijalankan.
Status hijau (passed) menandakan bahwa konfigurasi yang kita buat sudah sesuai dan berhasil dijalankan dengan sempurna. Merah (failed) artinya ada hal yang perlu diperbaiki.
Done! Setelah ini, ketika ada yang melakukan push / merge code ke branch staging, maka akan secara otomatis di deploy oleh Gitlab ke server. Cheers!