Di era software modern, kecepatan rilis dan stabilitas aplikasi bukan lagi kemewahan—itu keharusan. Nah, di sinilah DevOps dan CI/CD memainkan peran penting. Artikel ini akan bahas dari dasar: apa itu DevOps, bagaimana CI/CD bekerja, dan bagaimana kamu bisa membangun pipeline-nya sendiri menggunakan Docker.
1. DevOps dalam Teori: Kolaborasi dan Otomatisasi
DevOps adalah pendekatan budaya dan teknis yang menyatukan tim development (Dev) dan operations (Ops) agar bisa bekerja sama lebih efisien dalam membangun, menguji, dan merilis aplikasi. Kunci dari DevOps adalah:
- Kolaborasi lintas tim
- Otomatisasi proses build, test, dan deploy
- Monitoring dan feedback berkelanjutan
- Iterasi cepat dengan risiko minimum
Tujuannya? Menyediakan perangkat lunak yang reliable, cepat dirilis, dan mudah di-maintain.
2. Apa Itu CI/CD?
CI/CD adalah jantung dari DevOps. Istilah ini sering terdengar, tapi mari kita pecah jadi sederhana:
Continuous Integration (CI)
CI adalah proses otomatis untuk menggabungkan kode baru ke branch utama. Setiap kali developer push kode:
- Kode diuji secara otomatis.
- Build dilakukan untuk memastikan kode tetap jalan.
- Error bisa langsung diketahui sebelum sampai production.
Continuous Delivery (CD)
CD melanjutkan proses CI dengan otomatisasi deploy ke staging atau production. Tujuannya: kode siap rilis kapan saja dengan satu klik atau bahkan tanpa klik sama sekali (CD otomatis penuh).
3. Praktik CI/CD dengan Docker: Kenapa Ini Powerful?
Docker membuat semua proses build dan deployment jadi konsisten. Saat kamu membangun pipeline CI/CD, Docker memungkinkan kamu untuk:
- Menstandarkan environment build dan testing.
- Membungkus aplikasi dan dependency dalam satu image.
- Deploy image yang sama dari dev sampai production.
Keuntungannya jelas: lebih minim error, lebih cepat deploy, dan environment selalu sama.
4. Contoh Pipeline CI/CD Menggunakan Docker
Mari kita lihat contoh nyata bagaimana pipeline bekerja, misalnya di GitLab CI.
4.1. Struktur Project Sederhana
my-app/
├── Dockerfile
├── .gitlab-ci.yml
├── app/
│ └── main.py
├── tests/
│ └── test\_app.py
4.2. Contoh Dockerfile
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app/main.py"]
4.3. File .gitlab-ci.yml
stages:
- build
- test
- deploy
variables:
IMAGE_TAG: myregistry.com/my-app:$CI_COMMIT_SHORT_SHA
build:
stage: build
script:
- docker build -t $IMAGE_TAG .
- docker push $IMAGE_TAG
test:
stage: test
script:
- docker run --rm $IMAGE_TAG pytest tests/
deploy:
stage: deploy
script:
- echo "Deploying to production..."
- docker run -d -p 80:8000 $IMAGE_TAG
only:
- main
Penjelasan singkat:
- Build stage: bikin image dan push ke container registry.
- Test stage: jalankan test di dalam container.
- Deploy stage: jalankan container kalau branch yang di-push adalah
main
.
Pipeline seperti ini bikin proses dari push kode sampai jalan di server jadi otomatis dan stabil.
5. Tips dan Best Practice CI/CD Docker Pipeline
- Gunakan tag versi atau commit hash untuk image agar traceable.
- Pisahkan environment (dev, staging, prod) dengan konfigurasi berbeda.
- Jangan simpan secrets dalam image—gunakan secret manager atau environment variable.
- Scan image dari awal pakai tools seperti [Trivy] untuk cek CVE.
- Simpan hasil build ke registry yang terproteksi (misal GitHub Container Registry atau GitLab Registry).
6. Penutup
DevOps dan CI/CD bukan sekadar tren—mereka adalah fondasi cara kerja modern dalam membangun dan merilis software. Dengan pipeline berbasis Docker, kamu bisa menjamin proses yang konsisten, bisa direplikasi, dan mudah diotomasi.
Jadi, entah kamu masih baru atau sudah jalanin DevOps, mulai dari pipeline sederhana seperti di atas bisa jadi langkah awal yang sangat berdampak.
Referensi
- https://www.netsolutions.com/insights/what-is-devops
- https://www.atlassian.com/devops/what-is-devops/devops-best-practices
- https://opstree.com/blog/2025/05/15/devops-how-it-works-and-why-it-matters
- https://roadmap.sh/devops/best-practices
- https://docs.gitlab.com/ee/ci/docker/using_docker_build.html
- https://docs.docker.com/get-started/