Belajar Python - CI/CD, Containerization & Deployment
Episode 20 of 23

Belajar Python - CI/CD, Containerization & Deployment

Episode ini membawa aplikasi ke production: pipeline CI dengan GitHub Actions, caching dan matrix build untuk banyak versi Python, Docker multi-stage, menjalankan Gunicorn dan Uvicorn, serta target deployment seperti Cloud Run, AWS Lambda, dan Kubernetes.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

Kode yang lulus test lokal belum cukup. Episode 20 membawa kalian ke dunia CI/CD dan deployment: membangun pipeline otomatis dengan GitHub Actions, mengontainerisasi aplikasi dengan Docker, dan men-deploy ke target produksi modern.

Kita akan membahas caching dan matrix build, Docker multi-stage, kombinasi Gunicorn dan Uvicorn, serta target deployment seperti Cloud Run, AWS Lambda, dan Kubernetes. Di akhir episode, kalian punya alur dari commit sampai production.

CI dengan GitHub Actions

Membangun Pipeline Pertama

GitHub Actions menjalankan workflow otomatis dari file YAML:

Workflow CI dasar
name: CI
 
on:
  push:
    branches: [main]
 
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: "3.12"
      - run: pip install -e ".[dev]"
      - run: pytest

on: push: branches: [main] memicu workflow saat push ke main. actions/setup-python@v5 menyiapkan Python 3.12, lalu menjalankan install dan test. Setiap commit otomatis diuji — bug terdeteksi sebelum sampai production.

Caching Dependency

Caching mempercepat pipeline dengan memakai ulang dependency:

Workflow dengan caching
      - uses: actions/setup-python@v5
        with:
          python-version: "3.12"
          cache: "pip"
      - run: pip install -e ".[dev]"

cache: "pip" membuat GitHub Actions menyimpan cache dependency antar run. Pipelines berikutnya memakai cache, memangkas waktu install secara drastis. Caching adalah standar untuk CI yang efisien.

Matrix Build untuk Banyak Versi

Menguji Multi Versi Python

Matrix build menjalankan job yang sama untuk beberapa versi:

Matrix build Python
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: ["3.11", "3.12", "3.13"]
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: ${{ matrix.python-version }}
          cache: "pip"
      - run: pip install -e ".[dev]"
      - run: pytest

matrix: python-version: ["3.11", "3.12", "3.13"] menjalankan job untuk tiga versi Python. ${{ matrix.python-version }} diisi per kombinasi. Matrix build menjamin library kalian bekerja di semua versi yang didukung.

Docker Multi-Stage

Docker mengontainerisasi aplikasi. Multi-stage memisahkan build dan runtime:

Dockerfile multi-stage
FROM python:3.12-slim AS builder
WORKDIR /app
COPY pyproject.toml .
COPY src .
RUN pip wheel --no-cache-dir --wheel-dir /wheels .
 
FROM python:3.12-slim AS runtime
WORKDIR /app
COPY --from=builder /wheels /wheels
COPY --from=builder /app /app
RUN pip install --no-cache-dir /wheels/*
EXPOSE 8000
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]

Stage builder membangun wheel dependency, dan stage runtime hanya menyalin artefak hasil build. Image akhir menjadi kecil dan aman karena tidak menyertakan tool build. CMD menjalankan Uvicorn di port 8000.

Gunicorn dan Uvicorn di Production

Kombinasi untuk FastAPI

Untuk production, gabungkan Gunicorn sebagai process manager dan Uvicorn sebagai worker:

Menjalankan Gunicorn dengan Uvicorn worker
gunicorn app.main:app \
  --workers 4 \
  --worker-class uvicorn.workers.UvicornWorker \
  --bind 0.0.0.0:8000

gunicorn app.main:app menjalankan aplikasi dengan empat worker. --worker-class uvicorn.workers.UvicornWorker memakai Uvicorn sebagai worker async. Gunicorn mengelola lifecycle process sementara Uvicorn menangani request secara asinkron — kombinasi terbaik untuk FastAPI.

Target Deployment

Cloud Run

Cloud Run menjalankan container tanpa mengelola server:

Deploy ke Cloud Run
gcloud run deploy belajar-api \
  --image gcr.io/proyek/belajar-api \
  --platform managed \
  --region asia-southeast1 \
  --allow-unauthenticated

gcloud run deploy belajar-api men-deploy image ke Cloud Run. Platform mengelola scaling otomatis — dari nol sampai ribuan request per detik. Kalian hanya membayar saat ada traffic. Cloud Run cocok untuk API stateless.

Kubernetes Basics

Kubernetes mengorkestrasi container di banyak node:

Deployment Kubernetes
apiVersion: apps/v1
kind: Deployment
metadata:
  name: belajar-api
spec:
  replicas: 3
  selector:
    matchLabels:
      app: belajar-api
  template:
    metadata:
      labels:
        app: belajar-api
    spec:
      containers:
        - name: belajar-api
          image: gcr.io/proyek/belajar-api:v0.1.0
          ports:
            - containerPort: 8000

kind: Deployment mendeklarasikan aplikasi dengan tiga replika. Kubernetes menjaga replika tetap berjalan, melakukan rolling update, dan mengelola scaling. Pilih Kubernetes saat butuh kontrol penuh atas infrastruktur berskala besar.

Penutup

Inti yang harus dibawa pulang:

  • GitHub Actions mengotomatiskan test untuk setiap commit.
  • Caching dan matrix build membuat CI cepat dan luas cakupannya.
  • Docker multi-stage menghasilkan image kecil dan aman.
  • Gunicorn dengan Uvicorn worker adalah kombinasi production FastAPI.
  • Cloud Run menawarkan serverless scaling tanpa mengelola server.
  • Kubernetes memberi kontrol penuh untuk orkestrasi berskala besar.

Di episode 21 selanjutnya kita akan membahas observability, monitoring, dan maintenance — metrik dengan Prometheus, tracing dengan OpenTelemetry, strukturisasi log, error monitoring dengan Sentry, serta performance budget dan alerting. Aplikasi kalian akan bisa diamati dan dirawat dengan baik!

Belajar Python - CI/CD, Containerization & Deployment | Belajar Python