Deployment Otomatis Menggunakan GitLab, Jenkins, dan Docker
Pendahuluan
- Pembahasan tentang deployment otomatis menggunakan tiga tools: GitLab, Jenkins, dan Docker.
- Fokus pada arsitektur dan proses auto deployment.
Arsitektur
- Version Control System: Menggunakan GitLab untuk menyimpan source code.
- Server untuk Deployment: Ingin menggunakan server untuk deployment aplikasi.
Docker-based Deployment
- Pipeline Setup: Kode dari GitLab dimasukkan ke pipeline, lalu docker image dipush ke docker registry.
- Polling Mechanism: Cronjob berjalan setiap 5 menit untuk mengecek docker image baru dan melakukan docker pull, stop, dan run.
- Kekurangan: server dan docker registry bisa terbebani karena seringnya HTTP request.
SSH-based Deployment
- Pipeline with SSH: Pipeline melakukan SSH ke server dan menjalankan commands untuk docker pull dan run tanpa memerlukan password.
- Kekurangan: Membuka port 22 bisa menyebabkan risiko keamanan (brute-force attack).
Jenkins-based Deployment
- Pipeline Push to Docker Registry: Pipeline di GitLab akan push image ke docker registry setelah selesai build.
- Jenkins Server: Jenkins menerima trigger dari pipeline untuk melakukan deployment.
- Jenkins bisa diakses dari internet pada port 80/443 atau 8080.
- Setelah docker image siap, pipeline memanggil Jenkins job untuk deployment.
Implementasi
Contoh Repository
- Repository sederhana dengan Dockerfile dan index.html.
- Dockerfile: Menggunakan base image NGINX, mengkopi folder html ke container.
GitLab CI Configuration
- Stages: Build dan Deploy.
- Script: Login ke docker registry, build image, dan push image ke registry.
- Token: Dibuat dari GitLab untuk read/write registry. Token digunakan oleh Jenkins untuk melakukan curl request.
Jenkins Configuration
- Job: Auto deploy job yang memanggil URL dari pipeline GitLab.
- Script: Jenkins script sederhana untuk pull image, stop existing container, dan menjalankan container baru.
Contoh Implementasi
- Index Update: Melakukan perubahan pada file index.html dan commit.
- Pipeline Execution: Pipeline melakukan build dan push image baru ke registry.
- Jenkins Deployment: Jenkins job ditrigger untuk deployment, memastikan konten berubah dan container diperbarui.
Kesimpulan
- Keuntungan: Efektif untuk setup server internal yang hanya bisa diakses dari internal network, memastikan hanya port TCP yang diexpose.
- Alternatif Lain: Bisa menggunakan webhook dan asynchronous call untuk trigger Jenkins jobs dari GitLab.
Penutup
- Deployment otomatis menggunakan kombinasi GitLab, Jenkins, dan Docker memberikan kemudahan dalam deployment aplikasi.
- Autodeployment memungkinkan continuous integration dan continuous deployment (CI/CD) secara efisien.
- Dukungan untuk variasi aplikasi (Python, Node.js, dll) dengan gaya deploy yang serupa.
- Jangan lupa like, share, dan subscribe untuk mendukung channel ini.
Terima kasih dan semoga bermanfaat!