🚀

Deployment Otomatis Menggunakan GitLab, Jenkins, dan Docker

Jul 11, 2024

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!